IDE:Visual Studio 2022
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 顺序表的最大长度,这个按需要可以自己修改
// 顺序表结构体定义
typedef struct {
int data[MAXSIZE]; // 存储元素的数组
int length; // 当前顺序表的长度
} SqList;
// 初始化顺序表
void InitList(SqList* L) {
L->length = 0;
}
ListInsert() 函数要在 CreateList() 函数上面
// 向顺序表中插入元素
int ListInsert(SqList* L, int i, int e) {
if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) {
return 0; // 插入失败
}
for (int j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
return 1; // 插入成功
}
ListInsert() 函数和 CreateList() 函数上下顺序不能颠倒,因为 CreateList() 调用了 ListInsert()
// 创建顺序表
void CreateList(SqList* L, int n) {
InitList(L);
for (int i = 1; i <= n; i++) {
int e;
printf("请输入第%d个元素: ", i);
scanf("%d", &e);
ListInsert(L, i, e);
}
}
以下代码是一些关于顺序表的算法
// 直接插入排序
void InsertSort(SqList* L) {
int i, j, e;
for (i = 2; i <= L->length; i++) {
e = L->data[i - 1];
for (j = i - 1; j > 0 && L->data[j - 1] > e; j--) {
L->data[j] = L->data[j - 1];
}
L->data[j] = e;
}
}
// 冒泡排序
void BubbleSort(SqList* L) {
int i, j, temp;
for (i = 0; i < L->length - 1; i++) {
for (j = 0; j < L->length - i - 1; j++) {
if (L->data[j] > L->data[j + 1]) {
temp = L->data[j];
L->data[j] = L->data[j + 1];
L->data[j + 1] = temp;
}
}
}
}
// 快速排序
void QuickSort(SqList* L, int left, int right) {
if (left >= right) return;
int pivot = L->data[left], i = left, j = right;
while (i < j) {
while (i < j && L->data[j] >= pivot) j--;
L->data[i] = L->data[j];
while (i < j && L->data[i] <= pivot) i++;
L->data[j] = L->data[i];
}
L->data[i] = pivot;
QuickSort(L, left, i - 1);// 对左子数组进行排序
QuickSort(L, i + 1, right);// 对右子数组进行排序
}
到这里算法函数截止
// 打印顺序表
void PrintList(SqList L) {
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
主函数
int main() {
SqList L;
int n;
// 输入顺序表的长度
printf("请输入顺序表的长度: ");
scanf("%d", &n);
// 创建顺序表
CreateList(&L, n);
// 打印原始顺序表
printf("原始顺序表: ");
PrintList(L);
// 直接插入排序
InsertSort(&L);
printf("直接插入排序后: ");
PrintList(L);
// 冒泡排序(调用该函数前重置顺序表为原始状态)
CreateList(&L, n);
BubbleSort(&L);
printf("冒泡排序后: ");
PrintList(L);
// 快速排序(调用该函数前重置顺序表为原始状态)
CreateList(&L, n);
QuickSort(&L, 0, L.length - 1);
printf("快速排序后: ");
PrintList(L);
return 0;
}