选择排序法
基本思想:每一趟在n-i+1(i=1,2,'''n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.即第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换.共需进行i-1趟比较,直到所有记录排序完成为止.
举例说明:
a = {48 62 35 77 55 14 35 98}
↑ ↑
初始状态: i=k=0 j=1,将a[k]与a[j]进行比较,a[k]<a[j],所以 j++
a = {48 62 35 77 55 14 35 98}
↑ ↑
第二次比较: i=k=0 j=2,同样,将a[k]与a[j]进行比较,a[k]>a[j],所以将j的值赋给k,k=2,a[k]=35,j++
a = {48 62 35 77 55 14 35 98}
↑ ↑ ↑
第三次比较: i=0 k=2 j=3,同样,将a[k]与a[j]进行比较,a[k]<a[j],所以 j++
a = {48 62 35 77 55 14 35 98}
↑ ↑ ↑
第四次比较: i=0 k=2 j=4,同样,将a[k]与a[j]进行比较,a[k]<a[j],所以 j++
a = {48 62 35 77 55 14 35 98}
↑ ↑ ↑
第五次比较: i=0 k=2 j=5,同样,将a[k]与a[j]进行比较,a[k]>a[j],所以将j的值赋给k,k=5,a[4]=14,j++
a = {48 62 35 77 55 14 35 98}
↑ ↑ ↑
第六次比较: i=0 k=5 j=6,同样,将a[k]与a[j]进行比较,a[k]<a[j],所以 j++
a = {48 62 35 77 55 14 35 98}
↑ ↑ ↑
第七次比较: i=0 k=5 j=7,同样,将a[k]与a[j]进行比较,a[k]<a[j],结束第一趟选取最小值,此时k=5,i=0,不是同一个值,所以要将a[i]与a[k]的值进行交换,即a[i]=14,a[k]=48.
所以第一趟的排序结果为: 14 {62 35 77 55 48 35 98},最小值14已排好序,如此重复下一趟排序.
Java代码:
int[] a = {48,62,35,77,55,14,35,98};
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
int k;
for(int i=0;i<a.length;i++){
k = i;
for(int j=k+1;j<a.length;j++){
if(a[k]>a[j]){
k = j;
}
}
if(k!=i){
int temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
System.out.println("\n");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");