常见的几种排序

1. 直接选择排序设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出最小数,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。选择排序是不稳定的排序方法。

排序实例
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [76 97 65 49 ]
第五趟排序后 13 27 38 49 49 [97 65 76]
第六趟排序后 13 27 38 49 49 65 [97 76]
第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果:13 27 38 49 49 65 76 97

java的实现如下:

 static void selectSort(int[] arr){
       for(int i=0; i<arr.length-1; i++){
            //找最小数
            int min = arr[i];  
            int pos = i; 
            for(int j=i+1; j<arr.length; j++){
                 if(arr[j]<min) {
                      min = arr[j]; //为了下一次比较 
                      pos = j; //为了记住最小数的角标
                 }  
            }
            //换位置 
            exchange(arr, i, pos);
      }
 }


2. 冒泡排序:从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部。扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……执行n-1趟后就完成了记录序列的排序。冒泡排序是一种稳定排序算法。

排序实例
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [49 38 65 97 76 27 49]
第二趟排序后 13 27 [49 38 65 97 76 49]
第三趟排序后 13 27 38 [49 65 97 76 49]
第四趟排序后 13 27 38 49 [65 97 76 49]
第五趟排序后 13 27 38 49 49 [65 97 76]
第六趟排序后 13 27 38 49 49 65 [97 76]
第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果:13 27 38 49 49 65 76 97

java的实现如下:

 static void bubbleSort(int[] arr){
     for(int i=0; i<arr.length-1; i++){
         for(int j=arr.length-1; j>i; j--){
              if(arr[j]<arr[j-1])
              exchange(arr, j, j-1); 
         }
     }
 }


3. 直接插入排序:每次从无序表(原先没排好序的队列)中取出第一个元素,把它插入到有序表(排序后的,比如第一趟,那么前面两个就是有序表,以此类推,第二趟,前面三个就是有序表)的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后(或从后向前)扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。插入排序是一种稳定排序算法。

排序实例
初始关键字 [28, 56, 1, 19, 365, 243, 78, 9]
第一趟:[28, 56,1, 19, 365, 243, 78, 9]
第二趟:[1, 28, 56, 19, 365, 243, 78, 9]
第三趟:[1, 19, 28, 56,365, 243, 78, 9]
第四趟:[1, 19, 28, 56, 365, 243, 78, 9]
第五趟:[1, 19, 28, 56, 243, 365, 78, 9]
第六趟:[1, 19, 28, 56, 78, 243, 365,9]
第七趟:[1, 9, 19, 28, 56, 78, 243, 365]
最后排序结果:[1, 9, 19, 28, 56, 78, 243, 365]

java的实现如下:
 static void insertSort( int[] arr ){
      for( int i=1; i<arr.length; i++ ){
           int pos = i;
           while ( pos!=0 && arr[pos]<arr[pos-1] ) {
               exchange( arr, pos, pos-1 );
               pos--; 
           } 
      } 
 }



//交换元素的位置

 static void exchange(int[] arr, int pos1, int pos2)
 {
  int temp = arr[pos1];
  arr[pos1] = arr[pos2];
  arr[pos2] = temp; 
 }


参考:http://student.zjzk.cn/course_ware/data_structure/web/PAIXU/paixu8.1.1.1.htm










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值