选择排序

    选择排序原理:将数组的第一个数字和后面的数字进行比较,找到最小的一个,和第一个数字进行位置交换,第一轮排序完成,然后第二轮将第二个数字与后面为排序的数字进行对比,找出最小的一个,与第二数字进行位置交换,第二轮排序完成,然后是第三个与后面未排序的数组进行位置交换,以此类推。

    就是查找未排序中的最小的数字,和已经排序好的数字中最后一位数字进行位置交换。

    下面请看实例:

    初始值  78 ,45,  32,  96,  25,  33, 51

    第一轮排序  将78与后面的数字进行对比,对比发现25最小,78与25交换位置。

    第一轮排序结果为 :25  45  32  96  78  33  51  

    第二轮排序  将45与后面的数字进行对比,对比发现32最小,45与32交换位置。

    第二轮排序结果为 :25  32  45  96  78  33  51 

    第三轮排序  将45与后面的数字进行对比,对比发现33最小,45与33交换位置。

    第三轮排序结果为 :25  32  33  96  78  45  51

    第四轮排序  将96与后面的数字进行对比,对比发现45最小,96与45交换位置。

    第四轮排序结果为 :25  32  33  45  78  96  51  

    第五轮排序  将96与后面的数字进行对比,对比发现45最小,96与45交换位置。

    第五轮排序结果为 :25  32  33  45  78  96  51 

    第六轮排序  将78与后面的数字进行对比,对比发现51最小,78与51交换位置。

    第六轮排序结果为 :25  32  33  45  51  96  78  

    第七轮排序  将96与后面的数字进行对比,对比发现78最小,96与78交换位置。

    第七轮排序结果为 :25  32  33  45  51  78  96  

    最终排序完成  最终结果为 25  32  33  45  51  78  96  

    下面请看java代码

 1 public static void main(String[] args) {
 2                 int[]a={78 ,45,  32,  96,  25,  33, 51};
 3                 //进行外层循环,长度-1是因为数字下标从0开始,长度是从1开始,如果不减1,
 4                 //最后一次排序是没有意义的,因为倒数第二次就已经排序好了。
 5                 for (int i = 0; i <a.length-1;i++) {
 6                     //设置初始值,将第一个数字赋给min
 7                     int min=a[i];
 8                     //将第一个数字下标赋给index
 9                     int index=i;
10                     //内层循环,将min与其后面的数字进行逐个对比
11                     //j+1是因为第一个数字是min,已经取出来了,所以与j+1也就是第二个数字进行对比,总不能自己和自己对比吧。
12                     for (int j=i+1;j<a.length;j++) {
13                         //如果发现有比min小的,那么进行位置交换
14                         if(a[j]<min)
15                         {
16                             min=a[j];
17                             //将被交换数字下标取出,方面后面的交换赋值
18                             index=j;
19                         }
20                     }
21                     //到了这一步已经取出了这轮对比中最小值了
22                     int temp=a[i];
23                     //将最小值赋给a[i]
24                     a[i]=min;
25                     //将被交换的那个数字位置放上a[i]
26                     a[index]=temp;
27                     //打印每次排序后的结果
28                     System.out.print("第"+(i+1)+"次排序结果为 :");
29                     for (int k : a) {
30                         System.out.print(k+"  ");
31                         
32                     }
33                     System.out.println();
34                 }
35                 
36             }

  

    

原文地址:https://www.cnblogs.com/sanduweiliangxtx/p/5788295.html