修改后的代码如下:

#include <stdio.h> #define MAXL 10

typedef int KeyType; typedef int InfoType;

typedef struct { KeyType key; //KeyType为关键字的数据类型 InfoType otherdata; // InfoType为其他数据类型 } RecordType ;

void PrintList(RecordType r[], int n) //打印顺序表元素 { for (int i = 0; i < n; i++) { printf("%d ", r[i].key); } printf("\n"); }

int QKPass(RecordType r[ ], int low, int high) //一趟快速排序算法的实现

{ RecordType tmp; tmp = r[low]; /* 选择首记录为基准记录 */ while (low < high) /待排序区域长度大于1继续执行/ {
/*先从high向前扫描找小于tmp支点关键字的记录 / while (low < high && r[high].key >= tmp.key) high--; if (low < high)/找到小于tmp.key记录则放置到低半区/ {
r[low] = r[high]; /high指向的位置空了/ low++; }
/其次从low向后扫描找大于tmp.key的记录/ while (low < high && r[low].key < tmp.key) low++; if (low < high) /找到大于tmp.key的记录放置到高半区/ { r[high] = r[low]; high--; }
} r[low] = tmp; /
将支点保存到low=high的位置 / return low; / 返回支点的位置 */ }

void QKSort (RecordType r[ ], int low, int high) //快速排序 { int pos; if (low < high) { pos = QKPass (r, low, high); QKSort (r, low, pos-1); QKSort (r, pos+1, high); } }

int main() { RecordType arr[MAXL] = {{4, 0}, {3, 0}, {6, 0}, {1, 0}, {9, 0}, {7, 0}, {5, 0}, {8, 0}, {2, 0}, {0, 0}}; int delta[3] = {5, 3, 1}; printf("快速排序前为: "); PrintList(arr, MAXL); printf("快速排序后为: "); QKSort(arr, 0, MAXL - 1); PrintList(arr, MAXL); return 0; }

运行结果为:

快速排序前为: 4 3 6 1 9 7 5 8 2 0 快速排序后为: 0 1 2 3 4 5 6 7 8 9

快速排序的具体每一步排序过程如下:

第一次快排前:

4 3 6 1 9 7 5 8 2 0

第一次快排后:

0 3 2 1 4 7 5 8 6 9

第二次快排前:

0 3 2 1 4

第二次快排后:

0 1 2 3 4

第三次快排前:

7 5 8 6 9

第三次快排后:

5 6 7 8 9

最终排序结果:

0 1 2 3 4 5 6 7 8 9

可以看到,快速排序是一种高效率的排序算法,它利用分治思想,通过一次排序将待排序序列分割成两部分,使得一部分的所有元素都比另一部分的所有元素小,然后递归地对两部分分别进行排序,直到整个序列有序。在实际应用中,快速排序常用于大规模数据的排序

#include stdioh#define MAXL 10typedef int KeyType;typedef int InfoType;typedef struct KeyType key; KeyType为关键字的数据类型 InfoType otherdata; InfoType为其他数据类型 RecordType ;void PrintListRec

原文地址: https://www.cveoy.top/t/topic/fcuQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录