数据结构内部排序
- 格式:doc
- 大小:234.50 KB
- 文档页数:4
1.实验目的
通过上机实验对各种内部排序方法进行比较。
2.实验内容与要求
⑴实现三种以上内部排序方法;
⑵生成随机数以构造待排表;
⑶记录运行结果并加以分析。
3.数据结构设计
逻辑结构:线性结构
存储结构:顺序存储结构
4.算法设计
#include
#include
#include
#define MAXSIZE 20
typedef struct
{
int key;
}RedType;
typedef struct
{
RedType r[MAXSIZE+1];
int length;
}SqList;
int Partition(SqList &L, int low, int high) { // 算法10.6(b)
// 交换顺序表L中子序列L.r[low..high]的记录,使枢轴记录到位,
// 并返回其所在位置,此时,在它之前(后)的记录均不大(小)于它
int pivotkey;
L.r[0] = L.r[low]; // 用子表的第一个记录作枢轴记录
pivotkey = L.r[low].key; // 枢轴记录关键字
while (low { // 从表的两端交替地向中间扫描 while (low --high; L.r[low] = L.r[high]; // 将比枢轴记录小的记录移到低端 while (low ++low; L.r[high] = L.r[low]; // 将比枢轴记录大的记录移到高端 } L.r[low] = L.r[0]; // 枢轴记录到位 return low; // 返回枢轴位置 } // Partition void QSort(SqList &L, int low, int high) { //算法10.7 // 对顺序表L中的子序列L.r[low..high]进行快速排序 int pivotloc; if (low < high) { // 长度大于1 pivotloc = Partition(L, low, high); // 将L.r[low..high]一分为二 QSort(L, low, pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置 QSort(L, pivotloc+1, high); // 对高子表递归排序 } } // QSort void QuickSort(SqList &L) { // 算法10.8 // 对顺序表L进行快速排序 QSort(L, 1, L.length); } // QuickSort int PrintList(SqList L) { int i; printf("排序的得到的结果为\n"); for(i = 1 ; i <= L.length ; i++) printf("%d\t",L.r[i].key); printf("\n"); return 1; } int SelectMinKey(SqList L,int i) { int j,min,minj; min = L.r[i].key; minj = i; for(j = i ; j <= L.length ; j++) { if(min > L.r[j].key) { min = L.r[j].key; minj = j; } } return minj; } void SelectSort(SqList &L) { // 算法10.9 // 对顺序表L作简单选择排序。 int i,j; for (i=1; i { // 选择第i小的记录,并交换到位 j = SelectMinKey(L, i); // 在L.r[i..L.length]中选择key最小的记录 if (i!=j) { // L.r[i]←→L.r[j]; 与第i个记录交换 RedType temp; temp=L.r[i]; L.r[i]=L.r[j]; L.r[j]=temp; } } } // SelectSort void BubbleSort(SqList &L) { int i,j,change,temp; for(i = L.length ,change = 1; i >= 1 && change ; --i) { change = 0; for(j = 0 ; j < i ; j++) if(L.r[j].key > L.r[j+1].key) { temp = L.r[j].key; L.r[j].key = L.r[j+1].key; L.r[j+1].key = temp; change = 1; } } } int main() { SqList L; int i,j; srand((int)time(0)); //设置随机数种子 printf("请输入需要随机生成的无序表的长度\n"); printf("不要超过20\n"); scanf("%d",&j); L.r[0].key = 0; for(i = 1 ; i <= j ; i++ ) { L.r[i].key = (int)rand()%100; } L.length = j; printf("首先是冒泡排序法\n"); printf("随机序列如下\n"); PrintList(L); BubbleSort(L); printf("排序结束\n");