用C语言在一个程序中通过顺序表实现数据结构的直接插入排序、快速排序和简单选择排序,要求能够输入数据
时间: 2024-02-06 14:08:57 浏览: 70
以下是一个使用顺序表实现的直接插入排序、快速排序和简单选择排序的 C 语言程序,可以输入数据进行排序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int r[MAXSIZE + 1];
int length;
} SqList;
void swap(SqList *L, int i, int j) {
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
void printList(SqList L) {
for (int i = 1; i <= L.length; i++) {
printf("%d ", L.r[i]);
}
printf("\n");
}
void directInsertSort(SqList *L) {
for (int i = 2; i <= L->length; i++) {
if (L->r[i] < L->r[i-1]) {
L->r[0] = L->r[i];
int j;
for (j = i-1; L->r[j] > L->r[0]; j--) {
L->r[j+1] = L->r[j];
}
L->r[j+1] = L->r[0];
}
}
}
int partition(SqList *L, int low, int high) {
int pivotkey = L->r[low];
while (low < high) {
while (low < high && L->r[high] >= pivotkey) {
high--;
}
swap(L, low, high);
while (low < high && L->r[low] <= pivotkey) {
low++;
}
swap(L, low, high);
}
return low;
}
void quickSort(SqList *L, int low, int high) {
if (low < high) {
int pivotloc = partition(L, low, high);
quickSort(L, low, pivotloc-1);
quickSort(L, pivotloc+1, high);
}
}
void selectSort(SqList *L) {
for (int i = 1; i < L->length; i++) {
int k = i;
for (int j = i+1; j <= L->length; j++) {
if (L->r[j] < L->r[k]) {
k = j;
}
}
if (k != i) {
swap(L, i, k);
}
}
}
int main() {
SqList L;
printf("请输入待排序的数组长度:");
scanf("%d", &L.length);
printf("请输入待排序的数组元素:");
for (int i = 1; i <= L.length; i++) {
scanf("%d", &L.r[i]);
}
printf("直接插入排序前:");
printList(L);
directInsertSort(&L);
printf("直接插入排序后:");
printList(L);
printf("快速排序前:");
printList(L);
quickSort(&L, 1, L.length);
printf("快速排序后:");
printList(L);
printf("简单选择排序前:");
printList(L);
selectSort(&L);
printf("简单选择排序后:");
printList(L);
return 0;
}
```
在程序中,我们定义了一个 `SqList` 结构体,包含了一个整型数组 `r` 和数组长度 `length`。其中,数组 `r` 的长度为 `MAXSIZE + 1`,多出来的一个位置用于一些算法的辅助操作。
程序中定义了三个排序函数,分别是直接插入排序 `directInsertSort`、快速排序 `quickSort` 和简单选择排序 `selectSort`。这三个函数都使用了指向 `SqList` 的指针作为参数,可以直接对原始的数据进行排序。
最后在 `main` 函数中,我们首先从标准输入中读入了待排序的数组长度和元素,然后分别使用三个排序函数对数据进行排序,并输出排序前后的结果。
阅读全文