#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void swap(int &a, int &b)
{
int z = a;
a = b;
b = z;
}
int partition(int num[], int left, int right)
{
// 设置左右指针
int i = left;
int j = right;
// 设置默认轴值
int pivot = num[right];
// i和j最多只会相等,不会超越
while (i != j) { //i、j中间有值,继续
while (i < j && num[i] <= pivot) { // i<j:i、j相等跳出循环
i++;
}
while (i < j && num[j] >= pivot) {
j--;
}
if (i != j) { // 可以去掉就是i = j的时候,此时交不交换没影响
swap(num[i], num[j]);
}
}
// i=j时由于是i先找的,先停下,说明此处数值大于pivot。与pivot交换,pivot变成轴值
swap(num[i], num[right]);
// 不要忘记返回
return i;
}
void quickSort(int num[], int left, int right)
{
// 和归并排序不一样的是,要找到mid值(顺便排序)而不是直接中分
// mid算已经排好序的所以之后不运算mid
// 不需要两个相互比较再设置临时数组,而是与轴值比较后直接交换
if (left < right) {
int mid = partition(num, left, right);
quickSort(num, left, mid-1);
quickSort(num, mid+1, right);
}
}
int main()
{
srand((unsigned)time(NULL));
int N,num[1000];
cout<<"输入问题规模:"<<endl;
cin>>N;
// 随机数
for (int i=0; i<N; i++) {
num[i] = rand()%10 + 1;
}
// 输出
for (int i=0; i<N; i++) {
cout<<num[i]<<" ";
}
// 快速排序
quickSort(num, 0, N-1);
// 输出
cout<<endl;
for (int i=0; i<N; i++) {
cout<<num[i]<<" ";
}
return 0;
}
常用代码_快速排序
最新推荐文章于 2024-01-25 11:00:35 发布