作品如当课设,请提前联系我获取权限,有问题概不负责,需要定制魏:QTWZPW
目录
1.概要设计
本项目旨在实现常见的排序算法,并提供用户友好的交互界面,使用户能够选择不同的排序算法对输入的数组进行排序。除了排序功能外,还包括查找数组的最大最小值以及计算数组的平均值和总和的功能。
2.详细设计
主程序流程
主程序通过一个循环,不断显示菜单,并等待用户选择排序算法或其他功能。
用户选择排序算法后,程序会提示输入数组,接收用户输入,并动态分配内存空间来存储数组。
根据用户选择的排序算法,调用相应的排序函数进行排序。
排序完成后,输出排序后的数组,并释放动态分配的内存空间。
程序询问用户是否需要重新排序,若用户选择是,则回到菜单显示步骤;若用户选择否,则程序结束。
3. 排序算法实现
冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序等排序算法均有相应的实现函数。
每个排序函数接收一个整数数组和数组大小作为参数,对数组进行相应的排序操作。
在实现中,采用了常见的排序算法思想和算法逻辑,如冒泡排序的两层循环、快速排序的分区与递归、计数排序的计数与重排等。
4.其他功能实现
查找最大最小值:遍历数组,找到数组中的最大值和最小值,并输出。
计算平均值和总和:遍历数组,累加数组元素得到总和,然后除以数组大小得到平均值,并输出。
5.函数设计
本项目涉及多个函数,包括主函数 main()、各种排序算法函数、其他功能函数以及显示菜单函数。以下是对每个函数的详细设计。
主函数 main()
int main()
功能:程序入口,包含主程序流程和用户交互逻辑。
参数:无。
返回值:整数,表示程序执行结果。
设计思路:
初始化变量,包括选择、数组和数组大小等。
进入主程序循环,显示菜单,等待用户选择排序算法或其他功能。
根据用户选择执行相应的操作,如排序、查找最大最小值或计算平均值总和。
循环直到用户选择退出程序。
排序算法函数(例如 bubbleSort()、selectionSort() 等)
void bubbleSort(int arr[], int n)
功能:实现冒泡排序算法,对传入的数组进行排序。
参数:
arr:整数数组,待排序的数组。
n:整数,数组的大小。
返回值:无。
设计思路:
使用两层循环遍历数组,每次将相邻元素进行比较,若逆序则交换。
外层循环控制遍历次数,内层循环执行比较和交换操作。
其他功能函数(例如 findMinMax()、calculateAverageSum() 等)
void findMinMax(int arr[], int n)
功能:查找数组中的最大值和最小值。
参数:
arr:整数数组,待查找的数组。
n:整数,数组的大小。
返回值:无。
设计思路:
初始化最大值和最小值为数组第一个元素。
遍历数组,更新最大值和最小值。
输出最大值和最小值。
显示菜单函数 displayMenu()
void displayMenu()
功能:在主程序中调用,用于显示用户可选的排序算法以及其他功能。
参数:无。
返回值:无。
设计思路:
使用 printf 函数输出菜单选项,包括排序算法和其他功能选项。
格式化输出,使得菜单界面清晰易读。
6.运行效果
7.各类函数
冒泡排序算法实现
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
选择排序算法实现
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换元素
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
插入排序算法实现
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
希尔排序算法实现
void shellSort(int arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
归并排序算法实现
void merge(int arr[], int left, int mid, int right) {
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[left + i];
for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
i = 0;
j = 0;
k = left;
while (i < n1 &&am