C语言实现直接插入排序、折半插入排序和希尔排序
#include <stdio.h>
// 直接插入排序 void insertionSort(int arr[], int n, FILE* file) { 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;
// 将每一趟排序结果写入文件
fprintf(file, "第 %d 趟排序结果:", i);
for (int k = 0; k < n; k++)
fprintf(file, "%d ", arr[k]);
fprintf(file, "\n");
}
fprintf(file, "\n");
}
// 折半插入排序 void binaryInsertionSort(int arr[], int n, FILE* file) { int i, key, j; int low, high, mid; for (i = 1; i < n; i++) { key = arr[i]; low = 0; high = i - 1; while (low <= high) { mid = (low + high) / 2; if (key < arr[mid]) high = mid - 1; else low = mid + 1; } for (j = i - 1; j >= low; j--) arr[j + 1] = arr[j]; arr[low] = key;
// 将每一趟排序结果写入文件
fprintf(file, "第 %d 趟排序结果:", i);
for (int k = 0; k < n; k++)
fprintf(file, "%d ", arr[k]);
fprintf(file, "\n");
}
fprintf(file, "\n");
}
void shellSort(int arr[], int n, FILE* file) { int delta[3] = { 5, 3, 1 }; for (int i = 0; i < 3; i++) { int d = delta[i]; for (int j = d; j < n; j++) { int temp = arr[j]; int k = j - d; while (k >= 0 && arr[k] > temp) { arr[k + d] = arr[k]; k -= d; } arr[k + d] = temp; } fprintf(file, "第%d趟排序结果:", i + 1); for (int j = 0; j < n; j++) { fprintf(file, "%d ", arr[j]); } fprintf(file, "\n"); } }
int main() { int arr[10]; int n = sizeof(arr) / sizeof(arr[0]);
printf("请输入10个数字:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
FILE* file;
fopen_s(&file,"process and results.txt", "w");
if (file == NULL) {
printf("无法打开文件\n");
return 0;
}
fprintf(file, "原始数组: ");
for (int i = 0; i < n; i++)
fprintf(file, "%d ", arr[i]);
fprintf(file, "\n\n");
// 直接插入排序
fprintf(file, "直接插入排序过程:\n");
insertionSort(arr, n, file);
// 将数组恢复为原始状态
int arrCopy[10];
for (int i = 0; i < n; i++) {
arrCopy[i] = arr[i];
}
// 折半插入排序
fprintf(file, "折半插入排序过程:\n");
binaryInsertionSort(arrCopy, n, file);
// 将数组恢复为原始状态
int arrCopy2[10];
for (int i = 0; i < n; i++) {
arrCopy2[i] = arr[i];
}
// 希尔排序
fprintf(file, "希尔排序过程:\n");
shellSort(arrCopy2, n, file);
fclose(file);
return 0;
原文地址: https://www.cveoy.top/t/topic/pMMJ 著作权归作者所有。请勿转载和采集!