您的位置:首页 > 职场人生

程序员必会算法---快速排序

2020-08-20 12:50 281 查看

快排思想
首先从待排序数组任取一个元素(方便起见可以选择数组第一个元素),以此元素为基准,把小于等于基准的元素移到基准左侧,大于基准的元素移到基准右侧。以此基准为界,前面的元素小于等于基准元素,后面的元素大于等于基准元素,这个过程称为快排的一次划分。然后对两个子序列分别重复上述过程,直到完成排序。
快排是通过递归实现的,是一种时间复杂度为O(nlogn)的不稳定排序算法。

#include <iostream>
using namespace std;

void qSortArray(int array[], int start, int last)
{
int low = start;
int high = last;
if (low < high)
{
while (low < high)
{
while (array[low] <= array[start] && low < last)
{
low++;//满足小于基准的条件,指针右移
}
while (array[high] >= array[start] && high > start)
{
high--;//满足大于基准的条件,指针左移
}
if (low < high)
{
swap(array[low], array[high]);//交换两个不满足条件的元素
}
else
{
break;
}
}
swap(array[start], array[high]);//插入基准元素
qSortArray(array, start, high - 1);
qSortArray(array, high + 1, last);
}
}

void printArray(int array[], int len)
{
for (int i = 0; i < len; i++)
{
cout << array[i] << " ";
}
cout << endl;
}

int main()
{
int a[] = { 3, 9, 2, 1, 0, 10, 11, 8, 4, 50 };
int len = sizeof(a) / sizeof(a[0]);
cout << "排序前:" << " ";
printArray(a, len);
qSortArray(a, 0, len - 1);
cout << "排序后:" << " ";
printArray(a, len);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: