采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。完整代码
时间: 2024-03-01 21:52:19 浏览: 72
内部排序的程序 ,直接插入排序,简单选择排序,冒泡排序!
4星 · 用户满意度95%
好的,以下是完整的基于C语言的代码实现。
```c
#include <stdio.h>
#define MAXSIZE 100 // 定义顺序表最大长度为100
typedef struct {
int data[MAXSIZE];
int length;
} SqList; // 定义顺序表类型
void CreateList(SqList *L, int n) {
printf("请输入%d个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &L->data[i]);
}
L->length = n;
}
void InsertSort(SqList *L) {
int i, j;
for (i = 1; i < L->length; i++) {
if (L->data[i] < L->data[i-1]) { // 如果当前元素小于前一个元素
int tmp = L->data[i]; // 先将当前元素存储起来
for (j = i-1; j >= 0 && L->data[j] > tmp; j--) { // 从后往前遍历,将比当前元素大的元素依次后移
L->data[j+1] = L->data[j];
}
L->data[j+1] = tmp; // 将当前元素插入到正确位置
}
}
}
void BubbleSort(SqList *L) {
int flag = 1; // 设置标志位
for (int i = 0; i < L->length-1 && flag; i++) { // 如果上一轮没有交换,则说明已经有序,直接退出循环
flag = 0;
for (int j = 0; j < L->length-i-1; j++) {
if (L->data[j] > L->data[j+1]) { // 如果前一个元素大于后一个元素
int tmp = L->data[j]; // 交换两个元素的值
L->data[j] = L->data[j+1];
L->data[j+1] = tmp;
flag = 1; // 标志位设为1,表示还需要继续排序
}
}
}
}
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("请输入顺序表元素个数:\n");
scanf("%d", &n);
CreateList(&L, n);
printf("原始顺序表:\n");
PrintList(L);
InsertSort(&L);
printf("直接插入排序后的顺序表:\n");
PrintList(L);
BubbleSort(&L);
printf("冒泡排序后的顺序表:\n");
PrintList(L);
return 0;
}
```
注意,以上代码实现了顺序表的创建、直接插入排序、冒泡排序和打印顺序表的功能。在主函数中,根据用户输入的元素个数创建顺序表,然后分别进行排序并打印排序后的结果。
阅读全文