#include<iostream>
using namespace std;
#define MAX 100 //假定最大长度为100
#define OK 1
typedef int KeyType; //假定数据类型为int
typedef struct {
KeyType key; //关键字项
}RedType; //记录类型
typedef struct {
RedType r[MAX + 1]; //r[0]用作哨兵
int length; //表长
}SqList; //表的类型
int InitList_Sq(SqList& L); //初始化顺序表
int Partition(SqList& L, int low, int high);
void QSort(SqList& L, int low, int high); //快速排序
void print(SqList L); //输出顺序表
int main()
{
SqList L;
InitList_Sq(L);
QSort(L, 1, L.length);
print(L);
return 0;
}
int InitList_Sq(SqList& L)
{
int n, k = 1; //n为待输入数,k为计数器
L.length = 0; //表长初始化为0
while (1)
{
cin >> n;
if (n == -1) //假设输入-1为结束标志
break;
L.r[k++].key = n;
L.length++; //表长+1
}
return OK;
}
int Partition(SqList& L, int low, int high)
{
L.r[0] = L.r[low]; //设置哨兵位
int pivotkey = L.r[0].key; //设置中心元素
while (low < high)
{
while (low < high && L.r[high].key >= pivotkey) //从表尾开始找元素
--high; //high向前移动
L.r[low] = L.r[high];
while (low < high && L.r[low].key < pivotkey) //从表头开始找元素
++low; //low向后移动
L.r[high] = L.r[low];
}
L.r[low] = L.r[0];
return low; //返回排序后中心元素的位置
}
void QSort(SqList& L, int low, int high)
{
if (low < high) //长度大于1
{
int pivotloc = Partition(L, low, high); //设置枢轴位置
QSort(L, low, pivotloc - 1); //对低子表递归排序
QSort(L, pivotloc + 1, high); //对高子表递归排序
}
}
void print(SqList L)
{
for (int i = 1; i <= L.length; i++)
cout << L.r[i].key << ' ';
cout << endl;
}
内部排序-快速排序
最新推荐文章于 2024-06-05 23:42:05 发布