您的位置:首页 > 理论基础 > 数据结构算法

数据结构--排序算法--快速排序

2017-05-17 20:13 288 查看
思路:选择数组第一个元素,是的数组中小于等于其的数放在这个数的左边,大于其的数放在右边,左右两边分别调用递归排序,则最后都有序。
首先将划分值放在数组最后,建立一个小于等于区间,初始长度为0,从左往右遍历数组,当前值大于划分值时,继续遍历,当前值小于划分值时,将当前值与小于等于区间后的数调换位置,并将小于等于区间向右扩一个位置,当遍历到最后一个元素,将划分值与小于等于区间后第一个值对换,即完成一次排序。
int partition(int * A, int left, int right)
{
int i= left,j= right;
int x = A[left];
while (i < j)
{
while (i <j && A[j]>x)
--j;
if (i < j)
A[i++] = A[j];
while (i <j&&A[i] < x)
++i;
if (i < j)
A[j--] = A[i];
}
A[i] = x;
return i;
}
void qsort(int * A, int left, int right)//递归将关键字两边分成有序的数组
{
if (left < right)
{
int p1 = partition(A, left, right);
qsort(A, left, p1 - 1);
qsort(A, p1 + 1, right);
}
}
int* quickSort(int* A, int n) {
qsort(A, 0, n - 1);
return A;
}
void main()
{
for (int i = 0; i < n; i++)
{
cout << A[i] << endl;
}
quickSort(A, n);
cout << "快速排序后的结果为: " << endl;
for (int i = 0; i < n; i++)
{
cout << A[i] << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: