zoukankan      html  css  js  c++  java
  • 快速排序

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

    #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; }
  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/Bird-Man/p/4358059.html
Copyright © 2011-2022 走看看