Description |
创建一个一维数组,指定该一维数组的大小n,输入数组的n个元素,按指定算法(快速排序)对数组排序,并输出结果。 Input 仅有一组测试数据 第一行:输入一个整数n表示数组的长度(1<n<1000) 第二行:输入n个整数,整数之间用空格分隔 Output 输出n个排序后的整数,整数之间用空格分隔 |
Sample Input |
5 56 67 23 34 45 |
Sample Output |
23 34 45 56 67 |
Hint |
输出有换行 |
#include <iostream>
#define Maxsize 1005
using namespace std;
// 顺序存储结构
typedef struct Keynode
{
int key;
} Keynode;
typedef struct
{
Keynode *R;
int length;
} Sqlist;
void initQ(Sqlist &L)
{
L.R = new Keynode[Maxsize + 1];
}
void creatQ(Sqlist &L, int n)
{
L.length = n;
for (int i = 1; i <= n; i++)
{
cin >> L.R[i].key;
}
}
int partition(Sqlist &L, int low, int high)
{ // 分左右两部分进行操作
L.R[0] = L.R[low]; // 0下标记录中心值
int pivotkey = L.R[low].key;
while (low < high)
{ // 从右开始判断
while (low < high && L.R[high].key >= pivotkey) // 条件带等号
{ // 把高的部分换到低位
high--;
}
L.R[low] = L.R[high];
while (low < high && L.R[low].key <= pivotkey)
{ // 把低部分换到高位
low++;
}
L.R[high] = L.R[low];
} // 相等时结束low为标志位
L.R[low].key = L.R[0].key;
return low;
}
void Qsort(Sqlist &L, int low, int high)
{ // 递归进行排序
if (low < high)
{
int pivotloc = partition(L, low, high);
Qsort(L, low, pivotloc - 1);
Qsort(L, pivotloc + 1, high);
}
}
void PrintQ(Sqlist L)
{ // 输出
for (int i = 1; i <= L.length; i++)
{
cout << L.R[i].key;
if (i != L.length)
{
cout << " ";
}
}
cout << "\n";
}
int main()
{
Sqlist L;
int n;
cin >> n;
initQ(L);
creatQ(L, n);
Qsort(L, 1, L.length);
PrintQ(L);
return 0;
}