选择排序的原理:
从第一个元素开始,分别于后面的元素相比较,遇到最小值就交换位置,第一轮结束;从第二个元素开始,分别与后面的元素相比较,找到倒数第二小的元素,并交换位置,重复上述步骤,直到排序完成。
定义一个数组:int[] a={12,34,16,7};
第一轮:
指针指向第一个元素12,先与34作比较,最小还是12;再与16作比较,最小还是12;再与7作比较,最小值7。
输出结果:7,34,16,12
第二轮:
指针指向第二个元素,先与16作比较,最小16,交换;再与7做比较,最小7,交换
输出结果:7,12,16,34
第三轮:
指针指向第三个元素,与34做比较,最小16
输出结果:7,12,16,34
public static void main(String[] args) { int[] array={12,8,24,6};//定义一个数组 //第一轮排序 int len=array.length; for (int i=0;i<len-1;i++){ int min=array[i];//每一轮回的最小值都是array[i] int minIdenx=i;//最小值的索引值每一轮回都是i for(int j=i+1;j<len;j++){ if(min>array[j]){//如果前面的值大于后面的值,最小值为后面的 min=array[j]; minIdenx=j;//找到最小值的索引 } } if(i!=minIdenx){//如果最小值是自己可以不用进行下面交换 int temp=array[i]; array[i]=min; array[minIdenx]=temp; } } System.out.println(Arrays.toString(array)); }
原理很好懂,但是感觉每次都要与最小值交换会有点多余,代码还是自己多敲敲,可以直接用最值得索引来进行交换值
int[] a={67,389,47,489,2}; int len=a.length; for (int i = 0; i < len-1; i++) { int minIdex=i; for(int j=i+1;j<len;j++){ if(a[minIdex]>a[j]){ minIdex=j; } } if(i!=minIdex){ int temp=a[i]; a[i]=a[minIdex]; a[minIdex]=temp; } } System.out.println(Arrays.toString(a));
标签:12,16,int,冒泡排序,34,数据量,array,排序 From: https://www.cnblogs.com/Liku-java/p/16790191.html