今天心情稍微有点儿不好,没关系,写代码吧,转移注意力。
1.选择排序:
在一组待排序的数当中,去选择待排序的数当中,数最小的那个数,然后将整个数放在第一个位置,然后在剩下的待排序的数当中,去选择数值最小的数然后放到第二个数的位置,依次进行排序比较,直到倒数第二小的数和最大的数进行比较位置。实现的详细代码如下:
package 排序;
public class choice {
/**
* 选择排序算法,在未排序序列中找到最小的元素,存放到排序序列的起始位置
*
* 再从剩余未排序序列中继续寻找最小的元素,然后放到排序序列末尾
*
* 以此类推,直到所有元素均排序完毕。
* @param args
*/
public static void choice(int[] numbers){
int size=numbers.length;//数组长度
int temp=0;//中间变量
for(int i=0;i<size;i++){
int k=i;//将i的数值赋值给k
for(int j=size-1;j>i;j--){//将长度减一个数和最小值进行比较
if(numbers[j]<numbers[k]){
k=j;//k一开始的值是0,当数值比较为较小时,把下标较大的哪个数值换到下标较小的数值的位置上
}
}
//交换两个数
temp=numbers[i];
numbers[i]=numbers[k];
numbers[k]=temp;
}
}
public static void main(String[] args){
int[] a={52,68,59,57,23,44};
System.out.println("排序前");
out(a);
System.out.println("");
System.out.println("选择排序后");
choice(a);
out(a);
}
public static void out(int[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
}
}
可通过IDE的debug模式去熟悉排序算法的具体数据走向。
数据排序过程如下:
1.第一轮进行比较:
这里比较是第一个数依次和每个数进行比较,直到将数值最小的哪个数筛选出来位置
之后函数执行情况如下:
至此,最小的数被换到了数组下标最小的位置上:
在for循环体内部,进行第二轮比较,从除了第一个数的之外的所有数进行排序,
第二轮排序如下:
刚开始的排序顺序如上:
将44换到倒数第二的位置,至此,第二轮比较结束:
第三轮比较的数值交换位置至此第三轮结束。
选择排序遍历所有数先查到数值最小的数,然后,将其位置定下来,再进行接下来的排序,但是每次以遍历的时间复杂度会增高。
从i=2,也就是数组的第三个位置进行比较
将第三轮查到的最小数与上一轮所在的数组下标