参考《啊哈!算法》 有小改动
以此类推,第二次交换是9和4,然后i和j在3相遇,那么就将3和基准数交换 第一轮结束 然后按照上述方法分别处理6左右两侧的序列
以下是代码
希望解决:输入长度为n的数组
#include <iostream>
using namespace std;
int a[100], n;
void quicksort (int left,int right) {
int i, j, t, temp;
if (left > right)
return;
temp = a[left];
i = left;
j = right;
while (i != j) {
while (a[j] >= temp&&i < j)
j--;
while (a[i] <= temp&&i < j)
i++;
if (i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quicksort (left,i-1);
quicksort (i+1, right);
}
int main() {
int i;
cin>>n;
for (i = 0;i < n;i++) {
cin>>a[i];
}
quicksort(0,n-1);
for (i = 0;i < n;i++) {
cout<<a[i]<<" ";
}
return 0;
}
|