数组排序方法
2020-12-11 本文已影响0人
逆水寒鲤
以下内容仅作为我个人的学习参考进行记录:
选择排序,是一种比较简单粗暴的排序方法,每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。类似于军训方阵按身高调整队列,挑选出一个目测最小的目标,然后以该目标为准,依次对比其他同学,比他大的站他后面,比他小的放他前面,然后以前面那名同学为目标继续重复执行操作。
image.png
以下为示例:
import java.util.Arrays;
/**
* 选择排序
* @author Administrator
*
*/
public class Dome1 {
public static void main(String[] args) {
//声明数组
int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
//因为是十位的数组,所以只需要比较九次即可,所以是arr.length -1
//第一次循环,这是确定一个数依次和后面数的比较的数(找出第一个参考目标,通过与后面的数据进行比较得出,最小值和下标)
for (int i = 0; i < arr.length -1 ; i++) {
//这个是和第一个数的比较的数
for (int j = i+1; j < arr.length; j++) {
//定义一个临时的变量,用来交换变量
//如果不定义临时变量,直接交换,数值会出问题
int temp ;
//如果第一个数大于第二个比较的数,例如i=3>j=2,则开始交换位置
if(arr[i]>arr[j]){
//将大的那个值赋予临时变量,即temp=i=3
temp = arr[i];
//比测出来最小的那个值j=2,跟原参考值i=3作位置调换,即 arr = {2,3};
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//打印最后的排序结果
System.out.println(Arrays.toString(arr));
}
}
冒泡排序,意为:越小的元素会经由交换慢慢“浮”到数列的顶端。
运作机制:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
以下为示例:
import java.util.Arrays;
/**
* 冒泡排序
* 此顺序为从大到小排序,如想得到相反结果,只需要arr[j]<arr[j+1]即可
*@author Administrator
*/
public class Dome2 {
public static void main(String[] args) {
//数组
int[] arr = {5,3,7,2,6,7,6,5,4,1,9,8};
//外部循环
for(int i=0;i<arr.length-1;i++){
//相连两个数的索引是利用内部循环
for(int j=0;j<arr.length-1;j++){
//同样利用中间变量,注意区分与选择排序的区分
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
剩余的模式暂时还不理解,待熟悉后继续更新
参考:
https://www.cnblogs.com/taotingkai/p/6214367.html
https://www.liaoxuefeng.com/wiki/1252599548343744/1259543088592672
https://www.cnblogs.com/xiaoming0601/p/5866048.html