• 快速排序


    快速排序是先找到一个基准数字(可以随机),任何将不大于该数的数字左移,不小于该数的数字右移,再递归调用自己。

    #include<iostream>
    #include <cstdlib>
    #include<time.h>
    using namespace std;
    int input[50];
    int n;
    //产生随机数
    int random(int start,int end)
    {
       srand(time(NULL));//以当前系统时间产生随机数种子
       return start+rand()%((end-start));
    }
    //交换数字
    void swap(int *a,int *b)
    {
          int temp=*a;
          *a=*b;
          *b=temp;
    }
    //找到划分数字下标
    int findPartition(int data[],int start,int end)
    {
        int index=random(start,end);
        swap(&data[index],&data[end]);
        int mid=start-1;
        for(int index=start;index<n;++index)
        {
            if(data[index]<data[end])
            {
                ++mid;
                if(data[index]!=data[mid])
                {
                    swap(&data[index],&data[mid]);
                }
            }
        }
        ++mid;
        swap(&data[mid],&data[end]);
        return mid;
    }
    //递归调用自己进行排序
    void quickSort(int data[],int start,int end) { if(start==end||data==NULL) { return; } int index=findPartition(data,start,end); if(index>start) quickSort(data,start,index-1); if(index<end) quickSort(data,index+1,end); } int main(int argc, char const *argv[]) { char temp; while((temp=cin.get())!=' ') { if (temp>='0'&&temp<='9') { input[n++]=temp-'0';//数字字符与数字的转换通过加减‘0’ }else { cout<<"Invalid input"<<endl; return 0; } } quickSort(input,0,n-1); for(int i=0;i<n;++i) cout<<input[i]; return 0; }
  • 相关阅读:
    蓝桥杯入门训练
    <泛> STL
    传递 hdu 5961 拓扑排序有无环~
    Alice and Bob hdu 4268
    Bipartite Graph hdu 5313 bitset 并查集 二分图
    Bomb HDU 3555 dp状态转移
    不要62 hdu 2089 dfs记忆化搜索
    Leaving Auction CF 749D
    Moo University
    算法(三)
  • 原文地址:https://www.cnblogs.com/Bird-Man/p/4358059.html
Copyright © 2020-2023  润新知