zoukankan      html  css  js  c++  java
  • 选择排序

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

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

        下面请看实例:

        初始值  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             }

      

        

  • 相关阅读:
    Howto: (Almost) Everything In Active Directory via C#
    C#中使用Win32类库
    Use Case框图
    养成精通英语的三十个好习惯
    关于SQL2005EXPRESS默认远程无法连接的解决
    CAB之Service
    在模块中添加MVP模式兼容的视图
    SCSF 系列:Smart Client Software Factory 中 MVP 模式最佳实践
    Composite UI Application Block学习笔记之Event Broker[转载]
    老板的灵魂提问: 别人家的视频能自动播放为什么你开发的无法自动播放?为什么网页上的音视频无法自动播放了?
  • 原文地址:https://www.cnblogs.com/sanduweiliangxtx/p/5788295.html
Copyright © 2011-2022 走看看