zoukankan      html  css  js  c++  java
  • 基础算法之快速排序

    分治思想进行排序,目前在实践中使用最频繁效率最好的排序算法。

    快速排序是一个不稳定的算法,主要是因为在进行最后一步划界元素与S[i+1]交换的时候有可能打破前面元素的稳定性。

    图书馆老师在整理图书顺序的时候,会将一本书放中间,比这本书序列号大的放右边,小的放左边,这就是使用的快排哦~

    C++代码如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 template<class T> void quickSort(T data[],int p,int r)
     5 {
     6     int position = 0;
     7     if(p<r)
     8     {
     9         position = partition(data,p,r);
    10         quickSort(data,p,position-1);
    11         quickSort(data,p+1,r);
    12     }
    13 } 
    14 
    15 template<class T> int partition(T data[],int p,int r)
    16 {
    17     int position;
    18     T temp = data[r];
    19     int i = p-1;
    20     for(int j=p;j<r;j++)
    21     {
    22         if(data[j]<=temp)
    23         {
    24             i+=1;
    25             exchange(&data[i],&data[j]);
    26         }
    27     }
    28     exchange(&data[i+1],&data[r]);
    29     return i+1;
    30 }
    31 //从大到小
    32 /*
    33 template<class T> int partition(T data[],int p,int r)
    34 {
    35     int position;
    36     T temp = data[p];
    37     int i = r+1;
    38     for(int j=r;j>p;j--)
    39     {
    40         if(data[j]<=temp)
    41         {
    42             i-=1;
    43             exchange(&data[i],&data[j]);
    44         }
    45     }
    46     exchange(&data[i-1],&data[p]);
    47     return i-1;
    48 }
    49 */
    50 template<class T>  void exchange(T *a,T *b)
    51 {
    52     T temp = *a;
    53     *a = *b;
    54     *b = temp;
    55 }
    56 
    57 int main()
    58 {
    59     int data[] = {23,56,44,32,78,2,10};
    60     int length = 7;
    61     for(int i=0;i<length;i++)
    62     {
    63         cout<<data[i]<<" ";
    64     }
    65     cout<<endl;
    66     quickSort(data,0,6);
    67     for(int j=0;j<length;j++)
    68     {
    69         cout<<data[j]<<" ";
    70     }
    71     cout<<endl;
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    Visual Studio Code 配置C/C++环境
    二叉链的基本操作
    回文自动机
    吊打线段树的超级树状数组
    Treap平衡树
    uni-app nvue页面动态修改导航栏按钮
    uni-app map组件关于marker标记点动态设置的问题
    uni-app 提示 v-for 暂不支持循环数据
    uni-app APP端隐藏导航栏自定义按钮
    uni-app路径规划(打开第三方地图实现)
  • 原文地址:https://www.cnblogs.com/yueyanglou/p/4515949.html
Copyright © 2011-2022 走看看