zoukankan      html  css  js  c++  java
  • 排序问题

    (1)插入排序

     1 void insertSort(int arr[], int n){
     2     int i,j,t;
     3 
     4     for(i=1; i<n; i++){
     5         t = arr[i];
     6         for(j=i-1; arr[j]>t && j>=0; j--){
     7             arr[j+1] = arr[j];
     8         }
     9         arr[j+1] = t;
    10     }
    11 }

    (2)简单的快速排序

     1 void q_sort(int arr[], int sp, int ep){
     2     int m, i, t;
     3 
     4     if(sp >= ep)
     5         return;
     6     else{
     7         m = sp;
     8         for(i=sp+1; i<=ep; i++){
     9             if(arr[i] < arr[sp]){
    10                 m++;
    11                 t = arr[m];
    12                 arr[m] = arr[i];
    13                 arr[i] = t;
    14             }
    15         }
    16 
    17         t = arr[sp];
    18         arr[sp] = arr[m];
    19         arr[m] = t;
    20 
    21         q_sort(arr, sp, m-1);
    22         q_sort(arr, m+1, ep);
    23     }
    24 }

    原理:利用分治的思想,将数组排序范围最左端的元素作为参照,将比其小的元素移到其左边,将比其大的元素移动到其右边,在分别对两边的进行递归排序即可。


    (3)更好的几种快速排序

    1、双向划分

     1 void q_sort2(int arr[], int sp, int ep){
     2     int i, j, t;
     3     if(sp >= ep)
     4         return;
     5     else{
     6         i = sp;
     7         j = ep + 1;
     8         while(1){
     9             do{i++;} while(i<=ep && arr[i]<arr[sp]);
    10             do{j--;} while(j>=sp && arr[j]>arr[sp]);
    11 
    12             if(i>j) break;
    13             else{
    14                 t = arr[i];
    15                 arr[i] = arr[j];
    16                 arr[j] = t;
    17             }
    18         }
    19         
    20         t = arr[sp];
    21         arr[sp] = arr[j];
    22         arr[j] = t;
    23 
    24         q_sort2(arr, sp, j-1);
    25         q_sort2(arr, j+1, ep);
    26     }
    27 }

    2、随机选取参照元素

    将sp出的元素与[sp, ep]中随机的某个元素进行交换,再以sp处的元素作为参照进行分割排序,可以使得最差复杂度也趋近于O(nlogn)

  • 相关阅读:
    python 批处理excel文件实现数据的提取
    python 实现excel数据的提取和整理
    正则表达式
    The zen of python
    恶作剧程序之炸弹窗口
    C 坦克射击小游戏
    C 查找数的位置
    niit源码--Developing java applications using servlet and jsp1
    框架
    设置多页面登陆,注册,递交
  • 原文地址:https://www.cnblogs.com/lwyeah/p/8586475.html
Copyright © 2011-2022 走看看