#include <iostream>
using namespace std;
//对数组A[p....r]进行一趟排序,排序结果key将数组划分为两部分,前半部分小于key,后半部分大于key
int portition(int *A,int p,int r)
{
int key = A[r];//目标key固定为当前操作数组的最后一个元素
int temp;//用于交换用的临时变量
int i;
i = p-1;
for(int j = p;j<r;j++)
{
if(A[j]<=key)
{
i=i+1;
temp = A[i];
A[i]=A[j];
A[j]=temp;
}
}
temp = A[i+1];
A[i+1]=A[r];
A[r]=temp;
return i+1;
}
//递归划分;
//将A[p...r]划分为前后两部分,使得A[q]的前半部分比A[q]小,
//后半部分大,然后分别对前半部分和后半部分进行quicksort排序
void quickSort(int *A,int p,int r)
{
int q;
if(p<r)
{
q=portition(A,p,r);
quickSort(A,p,q-1);
quickSort(A,q+1,r);
}
}
void main()
{
cout <<"您将为几个整数进行排序?"<<endl;
int n;
cin >> n;
int * A = new int[n];
cout<<"输入数组"<<endl;
for(int i = 0 ;i < n ;i++)
{
cin >> A[i];
}
quickSort(A,0,n-1);
int i;
for(i = 0;i<n;i++)
{
cout << A[i]<<" ";
}
delete []A;
}
快速排序
最新推荐文章于 2023-12-07 14:48:37 发布