快速排序--c++实现

来源:互联网 发布:去哪学软件开发 编辑:程序博客网 时间:2024/05/18 01:17

最近看了快速排序的算法,结合自己的理解,写了一个快排的程序。程序的核心思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

我凭借这个思想写了一个挖坑填洞的程序,实现如下:

#include<iostream>using namespace std;void QuickSort(int a[],int left,int right){if(left>right)return;int key=a[left];int i=left,j=right;while(i<j){while(i<j&&a[j]>key)j--;if(i<j){a[i]=a[j];i++;}while(i<j&&a[i]<key)i++;if(i<j){a[j]=a[i];j--;}}a[i]=key;QuickSort(a,left,i-1);QuickSort(a,i+1,right);}int main(){int n;cout<<"请输入数组的个数:";cin>>n;int *a=new int[n];int num=n;cout<<"请输入"<<n<<"个数组元素:"<<endl;for(int i=0;i<num;i++)cin>>a[i];QuickSort(a,0,num-1);cout<<"排序后的结果为:"<<endl;for(int i=0;i<num;i++)cout<<a[i]<<" ";cout<<endl;return 0;}

运行结果如图: