设计一个c语言代码,可以在希尔、快速、二路归并排序中选择一种进行排序,其中可以选择是否继续要用其他的方式排序,原始的数据值是需要用户自己输入的,其中希尔排序需要展示三趟的排序过程
时间: 2024-03-17 10:39:51 浏览: 53
好的,我可以为您提供一个基于用户输入选择排序算法并支持继续排序的C语言代码。
```c
#include <stdio.h>
// 希尔排序
void shellSort(int arr[], int n) {
int gap, i, j, temp;
for (gap = n / 2; gap > 0; gap /= 2) {
for (i = gap; i < n; i++) {
temp = arr[i];
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
// 快速排序
void quickSort(int arr[], int low, int high) {
if (low < high) {
int i = low, j = high, pivot = arr[low];
while (i < j) {
while (i < j && arr[j] >= pivot)
j--;
if (i < j)
arr[i++] = arr[j];
while (i < j && arr[i] < pivot)
i++;
if (i < j)
arr[j--] = arr[i];
}
arr[i] = pivot;
quickSort(arr, low, i - 1);
quickSort(arr, i + 1, high);
}
}
// 归并排序
void merge(int arr[], int low, int mid, int high) {
int i = low, j = mid + 1, k = 0;
int temp[high - low + 1];
while (i <= mid && j <= high) {
if (arr[i] <= arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
while (i <= mid)
temp[k++] = arr[i++];
while (j <= high)
temp[k++] = arr[j++];
for (i = low, k = 0; i <= high; i++, k++)
arr[i] = temp[k];
}
void mergeSort(int arr[], int low, int high) {
if (low < high) {
int mid = (low + high) / 2;
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
}
int main() {
int n;
printf("请输入需要排序的元素个数:\n");
scanf("%d", &n);
int arr[n];
printf("请输入需要排序的元素:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int choice;
do {
printf("请选择排序算法:\n");
printf("1. 希尔排序\n");
printf("2. 快速排序\n");
printf("3. 归并排序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("希尔排序的三趟排序过程如下:\n");
shellSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
break;
case 2:
quickSort(arr, 0, n - 1);
break;
case 3:
mergeSort(arr, 0, n - 1);
break;
default:
printf("输入有误!\n");
return 0;
}
int continue_choice;
printf("是否继续排序?\n");
printf("1. 继续排序\n");
printf("2. 退出\n");
scanf("%d", &continue_choice);
if (continue_choice == 2)
break;
} while (1);
printf("排序结果为:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个代码可以让用户输入需要排序的元素个数和需要排序的元素,然后让用户选择排序算法。根据用户的选择,调用相应的排序函数进行排序,并输出排序结果。排序完成后,询问用户是否继续排序,如果用户选择继续排序,则再次让用户选择排序算法进行排序。如果用户选择退出,则输出最终排序结果。其中,希尔排序的三趟排序过程也会被输出。
阅读全文