排序系统
题目:自定义一个大小和元素自设的数组,能选择六种排序任意一个排序算法进行排序,并输出结果
需求分析: 需求1:需要设定一个大小和元素都可以自设的数组。 需求2:需要六种排序算法。 需求3:需要设定一个选择结构。 需求4:能循环使用 (没说自己加的)
设计流程
(1) 选择是否进入系统 (2) 输入要设计数组得大小 (3) 给数组中输入元素 (4) 选择排序得方法 (5) 输出结果 (6) 清屏并返回(1)操作
主要结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/386fe2134770038ec1b6b1d424d78859.png)
重要代码片段
{
printf("\n\n 选择排序方法,用该方法排序并输出:
\n 0.简单排序
\n 1.直接插入排序
\n 2.冒泡排序
\n 3.快速排序
\n 4.归并排序
\n 5.堆排序
\n 6.退出\n");
scanf("%d",&n2);
switch(n2)
{
case 0:{SelectSort(a, n1);Print(a,n1);} break; //简单排序
case 1:{InsertSort(a, n1);Print(a,n1);} break; //直接插入排序
case 2:{bubbling_sort(a,n1);Print(a,n1);}break; //冒泡排序
case 3:{quickSort(a, 0, n1-1);Print(a,n1);} break; //快速排序
case 4:{MergeSort(a, b, n1);Print(b,n1);}break; //归并排序
case 5: {HeapSort(a,n1);Print(a,n1);}break; //堆排序
case 6:{flag=0;}break;
default:printf("请输入(0~6)范围之内的数字");
}
system("pause");
system("cls"); }break;
case 1:return 0;break;
}
程序思路
先利用switch语句设置一排序系统进入界面,进入选0,退出选1; 选择0进入case 0:后{}中的排序系统;代码为上面的重要代码片段 选择要采用的排序算法,因为有system(“pause”);代码,所以在结果界面会停下; 最后system(“cls”);清屏 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b48e1be88b7d86cc6a944a55d2aba954.png)
排序算法可以参考的博客:https://blog.csdn.net/a3192048/article/details/80269862
我的代码
#include
#include
#define MAXSIZE 100
void Print(int a[],int n)
{
printf("排序后的结果为: ");
for (int j = 0; j a[j])
k = j;
}
return k;
}
void SelectSort(int a[], int n) {
int key, tmp;
for (int i = 0; i < n-1; i++) {
key = SelectMinKey(a, n, i); //选择最小的元素
if (key != i) {
tmp = a[i];
a[i] = a[key];
a[key] = tmp; //最小元素与第i位置元素互换
}
}
}
//直接插入排序
void InsertSort(int a[], int n)
{
for (int i = 1; i a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
//快速排序
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int a[], int low, int high)
{
int privotKey = a[low]; //基准元素
while (low < high)
{ //从表的两端交替地向中间扫描
while (low < high && a[high] >= privotKey) --high; //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端
swap(&a[low], &a[high]);
while (low < high && a[low] |