C语言实现直接插入排序、折半插入排序和希尔排序算法
#include <stdio.h> \n// 直接插入排序 void insertionSort(int arr[], int n, FILE* file) {\n\tint i, key, j;\n\tfor (i = 1; i < n; i++) {\n\t\tkey = arr[i];\n\t\tj = i - 1;\n\t\twhile (j >= 0 && arr[j] > key) {\n\t\t\tarr[j + 1] = arr[j];\n\t\t\tj = j - 1;\n\t\t}\n\t\tarr[j + 1] = key;\n\n\t\t// 将每一趟排序结果写入文件\n\t\tfprintf(file, "第 %d 趟排序结果:", i);\n\t\tfor (int k = 0; k < n; k++)\n\t\t\tfprintf(file, "%d ", arr[k]);\n\t\tfprintf(file, "\n");\n\t}\n\tfprintf(file, "\n");\n}\n\n// 折半插入排序 void binaryInsertionSort(int arr[], int n, FILE* file) {\n\tint i, key, j;\n\tint low, high, mid;\n\tfor (i = 1; i < n; i++) {\n\t\tkey = arr[i];\n\t\tlow = 0;\n\t\thigh = i - 1;\n\t\twhile (low <= high) {\n\t\t\tmid = (low + high) / 2;\n\t\t\tif (key < arr[mid])\n\t\t\t\thigh = mid - 1;\n\t\t\telse\n\t\t\t\tlow = mid + 1;\n\t\t}\n\t\tfor (j = i - 1; j >= low; j--)\n\t\t\tarr[j + 1] = arr[j];\n\t\tarr[low] = key;\n\n\t\t// 将每一趟排序结果写入文件\n\t\tfprintf(file, "第 %d 趟排序结果:", i);\n\t\tfor (int k = 0; k < n; k++)\n\t\t\tfprintf(file, "%d ", arr[k]);\n\t\tfprintf(file, "\n");\n\t}\n\tfprintf(file, "\n");\n}\n\nvoid shellSort(int arr[], int n, FILE* file) {\n\tint delta[3] = { 5, 3, 1 };\n\tfor (int i = 0; i < 3; i++) {\n\t\tint d = delta[i];\n\t\tfor (int j = d; j < n; j++) {\n\t\t\tint temp = arr[j];\n\t\t\tint k = j - d;\n\t\t\twhile (k >= 0 && arr[k] > temp) {\n\t\t\t\tarr[k + d] = arr[k];\n\t\t\t\tk -= d;\n\t\t\t}\n\t\t\tarr[k + d] = temp;\n\t\t}\n\t\tfprintf(file, "第%d趟排序结果:", i + 1);\n\t\tfor (int j = 0; j < n; j++) {\n\t\t\tfprintf(file, "%d ", arr[j]);\n\t\t}\n\t\tfprintf(file, "\n");\n\t}\n}\n\nint main() {\n\tint arr[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n\tint n = sizeof(arr) / sizeof(arr[0]);\n\n\tFILE* file;\n\tfopen_s(&file, "process and results.txt", "w");\n\tif (file == NULL) {\n\t\tprintf("无法打开文件\n");\n\t\treturn 0;\n\t}\n\n\tfprintf(file, "原始数组: ");\n\tfor (int i = 0; i < n; i++)\n\t\tfprintf(file, "%d ", arr[i]);\n\tfprintf(file, "\n\n");\n\n\t// 直接插入排序\n\tfprintf(file, "直接插入排序过程:\n");\n\tinsertionSort(arr, n, file);\n\n\t// 将数组恢复为原始状态\n\tint arrCopy[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n\n\t// 折半插入排序\n\tfprintf(file, "折半插入排序过程:\n");\n\tbinaryInsertionSort(arrCopy, n, file);\n\n\t// 将数组恢复为原始状态\n\tint arrCopy2[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n\n\t// 希尔排序\n\tfprintf(file, "希尔排序过程:\n");\n\tshellSort(arrCopy2, n, file);\n\n\tfclose(file);\n\treturn 0;\n
原文地址: http://www.cveoy.top/t/topic/pNOt 著作权归作者所有。请勿转载和采集!