快速排序算法

来源:互联网 发布:mac 输入法进程 编辑:程序博客网 时间:2024/05/21 10:22

之前一篇文章写了写堆排序算法的实现过程,今天进行快速排序算法的代码练习
说道快速排序,他的主要思想是将一个数列进行合理的划分,划分的标准来自枢轴的选择,其中使用枢轴来划分子序列,进而产生递推的表达,而得到子序列,通过交换数据而得到整体顺序一致的序列。
因此,枢轴的选取成为提高快速排序算法效率的根本要求。
废话不说了,基本的快排的思想在数据结构这本书中已经接触过了,具体的实现如下:

#include <iostream>using namespace std;template<class Any>void SwapData(Any &a,Any &b){    Any tmp=a;    a=b;    b=tmp;}template<class AnyType>void OutPut(AnyType array,int len){    cout << array[0];    for(int i=1;i<len;i++)        cout << " " << array[i];    cout << endl;}/*快速排序的核心思路就是如何选择枢轴的位置,也就是如何对整个数列进行合理的划分。改进快速排序的算法,其实本质就是改进对序列的划分的方法。*/template<class AnyType>void QuickSort(AnyType array[],int left,int right,int len){    if(left<right)    {        AnyType tmp=array[left];        int i=left;        int j=right+1;        while(true)        {            while(i+1<len && array[++i]<tmp);            while(j-1>-1 && array[--j]>tmp);            if(i>=j) break;            SwapData(array[i],array[j]);        }        array[left]=array[j];        array[j]=tmp;        QuickSort(array,left,j-1,len);        QuickSort(array,j+1,right,len);    }}template<class AnyType>int MyPartition(AnyType array[],int left,int right){    AnyType tmp=array[right];    int i=left-1;    for(int j=left;j<right;j++)    {        if(array[j]<=tmp)            SwapData(array[++i],array[j]);    }    SwapData(array[i+1],array[right]);    return i+1;}template<class AnyType>void QuickSortMoreFast(AnyType array[],int left,int right){    if(left<right)    {        int q=MyPartition(array,left,right);        QuickSortMoreFast(array,left,q-1);        QuickSortMoreFast(array,q+1,right);    }}//调用C++内部函数进行排序#include <algorithm>#include <vector>void InnerQSort(){    vector<int> data;    for(int i=0;i<50;i++)        data.push_back(rand());    sort(data.begin(),data.end());    OutPut(data,data.size());}int main(){//    int array[]={5,4,7,3,9,1,8,6,10,2};//    QuickSort(array,0,sizeof(array)/sizeof(int),sizeof(array)/sizeof(int));//    QuickSortMoreFast(array,0,sizeof(array)/sizeof(int));//    OutPut(array,sizeof(array)/sizeof(int));    InnerQSort();    return 0;}
1 0
原创粉丝点击