#include<iostream>
using namespace std;
int arr[100];
void QSult(int left, int right)
{
int mid, l, r, temp;
mid = arr[left];
if (left > right)return;//判断异常情况
l = left;
r = right;
while (l != r) {
while (arr[r] <= mid && l < r)r--;//一定是先右往左
while (arr[l] >= mid && l < r)l++;//左边找大于第一个数的数,右边找小于第一个数的数
if (l < r) {//左右下标没遇到时,交换下标下的值
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
}
}
arr[left] = arr[l];
arr[l] = mid; //第一个数和中间易位
QSult(left, l - 1);
QSult(l + 1, right);//左右相同操作
return;
}
int main()
{
for (int i = 0; i < 10; i++)cin >> arr[i];
QSult(0, 9);
for (int i = 0; i < 10; i++)cout << arr[i] << "\t";
}
算法笔记一之快速排序
最新推荐文章于 2022-11-09 22:47:08 发布