最近看了快速排序的算法,结合自己的理解,写了一个快排的程序。程序的核心思想是:
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;
}
运行结果如图: