#include <bits/stdc++.h>
using namespace std;
int a[1000];
void quick_sort(int s, int e) //s表示开头下标,e表示结尾下标
{
if (s < e)
{
int i = s, j = e; //i从左往右,j从右往左
while(i < j) //i,j还未重合时就一直往中间靠,假定已经找到桥梁数组值了
{
while(a[i] <= a[j] && i < j) //顺序是对的就让i往右走,j不动
{
i++;
}
if (i < j) //必须保证i与j还未重合,即桥梁值还未找到
{
swap(a[i],a[j]); //因为i<j满足条件了,其实也就是a[i] > a[j],因为前面的while循环退出的条件就是a[i] > a[j],所以到这步仍然满足
}
while(a[i] < a[j] && i < j) //桥梁值未找到就让j往左走
{
j--;
}
if (i < j)
{
swap(a[i],a[j]); //同上
}
}
quick_sort(s,i-1); //用分治的思想将当前数组以桥梁值为中心分成两半,递归到只有两个元素时往上回溯就使数组排好了序
quick_sort(i,e);
}
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
quick_sort(0,n-1);
for (int i = 0; i < n; i++)
{
if (i == 0) cout << a[i];
else cout << " " << a[i];
}
return 0;
}
快速排序
最新推荐文章于 2023-07-12 10:59:32 发布