C语言插入排序、折半插入排序和希尔排序实现及可视化输出
#include <stdio.h>\n\n// 直接插入排序\nvoid insertionSort(int arr[], int n, FILE* file) {\n int i, key, j;\n for (i = 1; i < n; i++) {\n key = arr[i];\n j = i - 1;\n while (j >= 0 && arr[j] > key) {\n arr[j + 1] = arr[j];\n j = j - 1;\n }\n arr[j + 1] = key;\n\n // 将每一趟排序结果写入文件\n fprintf(file, "第 %d 趟排序结果:", i);\n for (int k = 0; k < n; k++)\n fprintf(file, "%d ", arr[k]);\n fprintf(file, "\n");\n }\n fprintf(file, "\n");\n}\n\n// 折半插入排序\nvoid binaryInsertionSort(int arr[], int n, FILE* file) {\n int i, key, j;\n int low, high, mid;\n for (i = 1; i < n; i++) {\n key = arr[i];\n low = 0;\n high = i - 1;\n while (low <= high) {\n mid = (low + high) / 2;\n if (key < arr[mid])\n high = mid - 1;\n else\n low = mid + 1;\n }\n for (j = i - 1; j >= low; j--)\n arr[j + 1] = arr[j];\n arr[low] = key;\n\n // 将每一趟排序结果写入文件\n fprintf(file, "第 %d 趟排序结果:", i);\n for (int k = 0; k < n; k++)\n fprintf(file, "%d ", arr[k]);\n fprintf(file, "\n");\n }\n fprintf(file, "\n");\n}\n\nvoid shellSort(int arr[], int n, FILE* file) {\n int delta[3] = { 5, 3, 1 };\n for (int i = 0; i < 3; i++) {\n int d = delta[i];\n for (int j = d; j < n; j++) {\n int temp = arr[j];\n int k = j - d;\n while (k >= 0 && arr[k] > temp) {\n arr[k + d] = arr[k];\n k -= d;\n }\n arr[k + d] = temp;\n }\n fprintf(file, "第%d趟排序结果:", i + 1);\n for (int j = 0; j < n; j++) {\n fprintf(file, "%d ", arr[j]);\n }\n fprintf(file, "\n");\n }\n}\n\nint main() {\n int arr[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n int n = sizeof(arr) / sizeof(arr[0]);\n\n FILE* file;\n fopen_s(&file,"process and result.exe", "w");\n if (file == NULL) {\n printf("无法打开文件\n");\n return 0;\n }\n\n fprintf(file, "原始数组: ");\n for (int i = 0; i < n; i++)\n fprintf(file, "%d ", arr[i]);\n fprintf(file, "\n\n");\n\n // 直接插入排序\n fprintf(file, "直接插入排序过程:\n");\n insertionSort(arr, n, file);\n\n // 将数组恢复为原始状态\n int arrCopy[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n\n // 折半插入排序\n fprintf(file, "折半插入排序过程:\n");\n binaryInsertionSort(arrCopy, n, file);\n\n // 将数组恢复为原始状态\n int arrCopy2[] = { 49, 38, 65, 97, 76, 13, 27, 49, 55, 4 };\n\n // 希尔排序\n fprintf(file, "希尔排序过程:\n");\n shellSort(arrCopy2, n, file);\n\n fclose(file);\n\n return 0;\n}\n该函数怎么在编译器中打开exe内容:在编译器中打开exe文件,可以使用system函数来执行系统命令。在Windows系统中,可以使用以下代码来打开exe文件:\n\nc\n#include <stdlib.h>\n\nint main() {\n system("start process and result.exe");\n return 0;\n}\n\n\n将上述代码添加到原始代码的最后,重新编译并运行程序,即可打开生成的exe文件。
原文地址: https://www.cveoy.top/t/topic/pMIt 著作权归作者所有。请勿转载和采集!