zoukankan      html  css  js  c++  java
  • 剑指offer——面试题11:快速排序

     1 #include"iostream"
     2 #include"random"
     3 using namespace std;
     4 
     5 /*
     6 void Swap(int &a,int &b)
     7 {
     8     int tmp;
     9     tmp=a;
    10     a=b;
    11     b=tmp;
    12 }
    13 */
    14 //官方给的partition函数
    15 int Partition1(int *data,int start,int end)
    16 {
    17     int index=start+(rand()%(end-start+1));
    18     swap(data[index],data[end]);
    19     int small=start-1;
    20     for(index=start;index<end;index++)
    21     {
    22         if(data[index]<data[end])
    23         {
    24             small++;
    25             if(index!=small)
    26                 swap(data[index],data[small]);
    27         }
    28     }
    29     small++;
    30     swap(data[small],data[end]);
    31     return small;
    32 }
    33 
    34 //自定义Partition函数
    35 int Partition2(int *data,int start,int end)
    36 {
    37     int value=data[start];
    38     while(start<end)
    39     {
    40         while(start<end)
    41         {
    42             if(data[end]>value)
    43                 end--;
    44             else
    45                 break;
    46         }
    47         if(start<end)
    48             data[start++]=data[end];
    49         while(start<end)
    50         {
    51             if(data[start]<=value)
    52                 start++;
    53             else
    54                 break;
    55         }
    56         if(start<end)
    57             data[end--]=data[start];
    58     }
    59     data[start]=value;
    60     return start;
    61 }
    62 
    63 void QuickSort1(int *data,int start,int end)
    64 {
    65     if(start==end) return;
    66 
    67     int mid=Partition1(data,start,end);
    68     if(mid>start)
    69         QuickSort1(data,start,mid-1);
    70     if(mid<end)
    71         QuickSort1(data,mid+1,end);
    72 }
    73 
    74 void QuickSort2(int *data,int start,int end)
    75 {
    76     if(start==end) return;
    77 
    78     int mid=Partition2(data,start,end);
    79     if(mid>start)
    80         QuickSort2(data,start,mid-1);
    81     if(mid<end)
    82         QuickSort2(data,mid+1,end);
    83 }
    QuickSort.h
     1 #include"QuickSort.h"
     2 
     3 void Test1()
     4 {
     5     int data[10]={6,4,1,5,2,9,8,10,3,7};
     6     cout<<"use QuickSort1:";
     7     QuickSort1(data,0,9);
     8     for(int i=0;i<10;i++)
     9         cout<<data[i]<<" ";
    10     cout<<endl;
    11 }
    12 
    13 void Test2()
    14 {
    15     int data[10]={6,4,1,5,2,9,8,10,3,7};
    16     cout<<"use QuickSort2:";
    17     QuickSort2(data,0,9);
    18     for(int i=0;i<10;i++)
    19         cout<<data[i]<<" ";
    20     cout<<endl;
    21 }
    22 int main()
    23 {
    24     Test1();
    25     Test2();
    26 }
    TestQuickSort.cpp
  • 相关阅读:
    以查询功能谈下,三层架构中的工厂模式与其中反射的应用
    结对编程
    第四周周结
    知识思考
    自我介绍
    本周开发工作及内容
    第三周周结
    启航
    如何写出健壮的Java代码
    CentOS x64上Matlab R2015b的镜像安装方法与卸载
  • 原文地址:https://www.cnblogs.com/acm-jing/p/10391125.html
Copyright © 2011-2022 走看看