选择排序法

    基本思想:每一趟在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]+"   ");
  

 

 

posted @ 2012-08-09 14:32  紫霖  阅读(149)  评论(0编辑  收藏  举报