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[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 }; int n = sizeof(arr) / sizeof(arr[0]);
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[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };
// 折半插入排序
fprintf(file, '折半插入排序过程:\n');
binaryInsertionSort(arrCopy, n, file);
// 将数组恢复为原始状态
int arrCopy2[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };
// 希尔排序
fprintf(file, '希尔排序过程:\n');
shellSort(arrCopy2, n, file);
fclose(file);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/pNNF 著作权归作者所有。请勿转载和采集!