快速排序目录
- 一.快速排序的原理
- 二.快速排序的图解
- 三.快速排序的实现
- 1.基准两边分
- 2.分而治之
- 四.完整代码
一.快速排序的原理
- 每次选取第一个数为基准数.
- 然后使用乾坤大挪移将大于或者小于基准的元素分别放置于基准数两边.
- 继续分别对基准数两侧未排序的数据使用分治法进行处理,直到整个序列有序.
二.快速排序的图解
基准数就已经在有序的位置上了,开始两边分而治之.
三.快速排序的实现
1.基准两边分
low和high就是数组的下标的最左边和最右边.
选择最小的数为基准数.
分别左右两边依次比较,排好的就下次就不比较了.
直到i==j说明比较完毕.
int partition(int arr[], int low, int high)
{
int i = low;
int j = high;
int base = arr[low];
if (low < high)
{
while (i<j)
{
while (i<j&&arr[j]>base)
{
j--;
}
if (i < j)
{
arr[i] = arr[j];
i++;
}
while (i<j&&arr[i]<base)
{
i++;
}
if (i < j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = base;
}
return i;
}
2.分而治之
不停的将基准数的两边进行快速排序.
四.完整代码
#include <iostream>
using namespace std;
int partition(int arr[], int low, int high)
{
int i = low;
int j = high;
int base = arr[low];
if (low < high)
{
while (i<j)
{
while (i<j&&arr[j]>base)
{
j--;
}
if (i < j)
{
arr[i] = arr[j];
i++;
}
while (i<j&&arr[i]<base)
{
i++;
}
if (i < j)
{
arr[j] = arr[i];
j--;
}
}
arr[i] = base;
}
return i;
}
void QuickSort(int arr[], int low, int high)
{
if (low < high)
{
int index = partition(arr, low, high);
QuickSort(arr, low, index - 1);
QuickSort(arr, index + 1, high);
}
}
int main()
{
int test[] = { 5,1,3,2,7,4,6,9,8,10 };
int len = sizeof(test) / sizeof(test[0]);
QuickSort(test, 0, len - 1);
cout << "排序结果:" << endl;
for (int i = 0; i < len; i++)
{
cout << test[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
运行结果:
2024年8月20日10:29:49