采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。代码
时间: 2024-03-01 07:52:13 浏览: 22
好的,以下是基于C语言的代码实现。
先定义顺序表的结构体:
```c
#define MAXSIZE 100 // 定义顺序表最大长度为100
typedef struct {
int data[MAXSIZE];
int length;
} SqList; // 定义顺序表类型
```
接下来是顺序表的创建函数:
```c
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;
}
```
然后是直接插入排序:
```c
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; // 将当前元素插入到正确位置
}
}
}
```
最后是冒泡排序:
```c
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,表示还需要继续排序
}
}
}
}
```
完整代码如下:
阅读全文