#include<stdio.h>
#include<iostream>
#define MAXL 100
typedef int KeyType;
typedef char InfoType;
typedef struct
{
KeyType key;
InfoType data;
}RecType;
void CreateList(RecType R[], KeyType keys[], int n)
{
for (int i = 0; i < n; i++)
{
R[i].key = keys[i];
}
}
void Display(RecType R[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d", R[i].key);
}
printf("\n");
}
void disppart(RecType R[], int s, int t)//显示一趟排序后的结果
{
static int i = 1;
int j;
printf("第%d次划分:", i);
for (j = 0; j < s; j++)
printf(" ");
for (j = s; j <= t; j++)
printf("%3d", R[j].key);
printf("\n");
i++;
}
int partition(RecType R[], int s, int t)
{
int i = s, j = t;
RecType tmp = R[i]; //以R[i]为基准
while (i<j) //从两端交替向中间扫描,直至i=j为止
{
while (j>i && R[j].key >= tmp.key)
j--; //从右向左扫描,找一个小于tmp.key的R[j]
R[i] = R[j]; //找到这样的R[j],放入R[i]处
while (i<j && R[i].key <= tmp.key)
i++; //从左向右扫描,找一个大于tmp.key的R[i]
R[j] = R[i]; //找到这样的R[i],放入R[j]处
}
R[i] = tmp;
disppart(R, s, t);
return i;
}
void QuickSort(RecType R[], int s, int t)
{
int i;
if (s<t) //区间内至少存在两个元素的情况
{
i = partition(R, s, t);
QuickSort(R, s, i - 1); //对左区间递归排序
QuickSort(R, i + 1, t); //对右区间递归排序
}
}
int main()
{
int n = 10;
RecType R[MAXL];
KeyType a[] = { 3,7,4,2,8,1,9,0,5,6 };
CreateList(R, a, n);
printf("排序前:");
Display(R, n);
QuickSort(R, 0, n - 1);
printf("排序后:");
Display(R, n);
system("pause");
return 1;
}
排序方法5---快速排序
最新推荐文章于 2021-09-28 18:58:42 发布