用C语言完成:输入一组关键字序列分别实现下列排序,并将上述几种排序的算法编写成菜单,根据输入的数字不同执行对应的排序算法,待排序数据长度从键盘输入;同一排序算法能反复执行,直到退出为止 ①直接插入排序。 ②选择排序。 ③冒泡排序。 ④快速排序。
时间: 2025-02-09 12:16:04 浏览: 37
好的,下面是一个用C语言实现的程序,它可以输入一组关键字序列,并实现直接插入排序、选择排序、冒泡排序和快速排序。程序会根据用户输入的数字执行对应的排序算法,并且同一排序算法可以反复执行,直到用户选择退出。
```c
#include <stdio.h>
#include <stdlib.h>
// 直接插入排序
void insertionSort(int arr[], int n) {
int i, key, j;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
// 选择排序
void selectionSort(int arr[], int n) {
int i, j, min_idx, temp;
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
// 冒泡排序
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; i++)
for (j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
// 快速排序的辅助函数
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1), temp;
for (int j = low; j <= high-1; j++) {
if (arr[j] < pivot) {
i++;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return (i + 1);
}
// 快速排序
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
// 打印数组
void printArray(int arr[], int size) {
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// 主函数
int main() {
int n, choice, i;
printf("请输入待排序数据的长度: ");
scanf("%d", &n);
int arr[n];
printf("请输入待排序的数据: ");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
while (1) {
printf("\n请选择排序算法:\n");
printf("1. 直接插入排序\n");
printf("2. 选择排序\n");
printf("3. 冒泡排序\n");
printf("4. 快速排序\n");
printf("5. 退出\n");
printf("输入你的选择: ");
scanf("%d", &choice);
switch (choice) {
case 1:
insertionSort(arr, n);
printf("直接插入排序后的数组: ");
printArray(arr, n);
break;
case 2:
selectionSort(arr, n);
printf("选择排序后的数组: ");
printArray(arr, n);
break;
case 3:
bubbleSort(arr, n);
printf("冒泡排序后的数组: ");
printArray(arr, n);
break;
case 4:
quickSort(arr, 0, n-1);
printf("快速排序后的数组: ");
printArray(arr, n);
break;
case 5:
exit(0);
default:
printf("无效的选择,请重新输入\n");
}
}
return 0;
}
```
阅读全文
相关推荐















