c语言,使用顺序表实现直接查复排序算法,并在主函数中输入元素,再输出排序结果(需要用到顺序表的各种基本运算)
时间: 2024-10-25 15:15:46 浏览: 23
在C语言中,我们可以使用顺序表(也称为数组)来实现直接选择排序算法。直接选择排序的基本思想是每次从未排序的部分找出最小(大)元素并放到已排序部分的末尾。以下是步骤和代码示例:
1. 定义顺序表结构,包含数据元素和长度:
```c
typedef struct {
int* data; // 数据指针
int size; // 当前元素的数量
} List;
```
2. 初始化顺序表:
```c
List createList(int arr[], int n) {
List list;
list.data = (int*)malloc(n * sizeof(int));
if (!list.data) {
printf("Memory allocation failed.\n");
return list;
}
for (int i = 0; i < n; i++) {
list.data[i] = arr[i];
}
list.size = n;
return list;
}
```
3. 直接选择排序的交换操作:
```c
void swap(List* list, int i, int j) {
int temp = list->data[i];
list->data[i] = list->data[j];
list->data[j] = temp;
}
```
4. 选择排序函数:
```c
void selectionSort(List* list) {
for (int i = 0; i < list->size - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < list->size; j++) {
if (list->data[j] < list->data[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(list, i, minIndex);
}
}
}
```
5. 主函数示例:
```c
int main() {
int arr[] = {9, 5, 1, 6, 3};
int n = sizeof(arr) / sizeof(arr[0]);
List list = createList(arr, n);
selectionSort(&list);
printf("Sorted array is:\n");
for (int i = 0; i < list.size; i++) {
printf("%d ", list.data[i]);
}
free(list.data); // 释放内存
return 0;
}
```
阅读全文