多种排序算法过程的控制台可视化
1
·
完成对直接插入排序、选择排序、快速排序的过程的可视化
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <time.h>
#include<conio.h>
#include <stdlib.h>
using namespace std;
int n = 0, i = 0, j = 0, k = 0, b = 0, d, temp, cnn = 0, N, p = 0, L = 0, R = 0;
char c, ch;
//直接插入排序、选择排序、快速排序算法
void menu()
{
cout << "1.直接插入排序" << endl;
cout << "2.选择排序" << endl;
cout << "3.快速排序" << endl;
cout << "4.退出" << endl;
cout << "请选择:" << endl;
}
void selectSort(int* a, int N)
{
system("cls");//清除屏幕上显示的信息
printf("原始数据:\n");//输出原始数据
for (i = 0; i < N; i++)
printf("%d ", a[i]);
int maxN = 0;
for (int i = 0; i < 50; i++)
{
maxN = max(a[i], maxN);//把数组中的最大元素找出来
}
for (i = 0; i < N - 1; i++)
{
d = i;//先使d记录排序范围内的第一个元素的位置
int flag = 0;
for (j = i + 1; j < N; j++)
{//找出最大元素,由d记录
if (a[d] > a[j])
{
d = j;
}
}
if (d != i)
{//如果排序范围的第一个元素(即第i个元素)不是最大值,则将最大元素与第i个元素对调
temp = a[d];
a[d] = a[i];
a[i] = temp;
flag = 1;
}
//if (flag == 0) break;//未进行排序则不输出
//if (_kbhit()) system("pause");//检测是否按键来暂停/继续
printf("第%d步\n", i + 1);
for (int i = maxN; i > 0; i--)
{
for (int j = 0; j < 50; j++)
{
if (a[j] >= i)
cout << "* ";
else
cout << " ";
}
if (i != 1)
cout << endl;
}
cout << endl;
//system("pause");
system("cls");//清除屏幕上显示的信息
}
system("pause");
}
void blnsertsort1(int* a, int N) {//插入排序
system("cls");//清除屏幕上显示的信息
printf("原始数据:\n");//输出原始数据
for (b = 0; b < N; b++) printf("%d ", a[b]);
printf("\n\n");
int maxN = 0;
for (int i = 0; i < 50; i++)
{
maxN = max(a[i], maxN);//把数组中的最大元素找出来
}
for (i = 1; i < N; i++)//循环遍历
{
temp = a[i];//将temp每一次赋值为a[i]
j = i - 1;
while (j >= 0 && temp < a[j])
{
a[j + 1] = a[j];//将大的元素往后放
j--;
}
a[j + 1] = temp;//如果插入的数比之前的大,将a[i]与a[j+1]互换
if (a[i] != temp) {
cnn = cnn + 1;
printf("第%d步:\n", cnn);//输出每一步的不重复过程
for (int i = maxN; i > 0; i--)
{
for (int j = 0; j < 50; j++)
{
if (a[j] >= i)
cout << "* ";
else
cout << " ";
}
if (i != 1)
cout << endl;
}
cout << endl;
printf("\n\n");
// system("pause");
system("cls");//清除屏幕上显示的信息
}
}
system("pause");
}
void fastSort1(int* R, int low, int high) //快速排序
{
int i, j, temp;
i = low;
j = high;
int maxN = 0;
for (int i = 0; i < 50; i++)
{
maxN = max(R[i], maxN);//把数组中的最大元素找出来
}
if (low < high)
{
temp = R[low]; //设置枢轴
while (i != j)
{
while (j > i&& R[j] >= temp)
{
--j;
}
if (i < j)
{
R[i] = R[j];
++i;
}
while (i < j && R[i] < temp)
{
++i;
}
if (i < j)
{
R[j] = R[i];
--j;
}
}
R[i] = temp;
printf("第%d步:\n", cnn++);//输出每一步的不重复过程
for (int i = maxN; i > 0; i--)
{
for (int j = 0; j < 50; j++)
{
if (R[j] >= i)
cout << "* ";
else
cout << " ";
}
if (i != 1)
cout << endl;
}
cout << endl;
system("cls");//清除屏幕上显示的信息
fastSort1(R, low, i - 1);
fastSort1(R, i + 1, high);
}
}
int main()
{
int sel;
srand(time(0));
int a[60];
for (i == 0; i < 50; i++)
{
a[i] = rand() % 49 + 1;//产生1--50的随机数
}
system("cls");
menu();
cin >> sel;
if (sel == 4)
return 0;
switch (sel)
{
case 1:
blnsertsort1(a, 50);
break;
case 2:
selectSort(a, 50);
break;
case 3:
fastSort1(a, 0, 49);
break;
}
return 0;
}
运行结果:

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)