直接插入排序c++easyX
时间: 2023-12-11 10:53:14 浏览: 37
可以参考下面的代码实现:
```cpp
#include <iostream>
#include <graphics.h>
using namespace std;
void insertSort(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;
}
}
int main() {
initgraph(640, 480);
int arr[] = { 10, 8, 3, 6, 2, 7, 9, 4, 1, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
insertSort(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
closegraph();
return 0;
}
```
这里用了 EasyX 图形库来可视化排序过程,若不需要可自行删除 initgraph 和 closegraph。
相关问题
直接插入排序easyX
好的,下面是一个简单的插入排序实现,并使用easyX库进行可视化展示:
```c++
#include <graphics.h>
#include <conio.h>
#include <time.h>
const int WINDOW_WIDTH = 800;
const int WINDOW_HEIGHT = 600;
const int BAR_WIDTH = 4;
const int BAR_HEIGHT = 400;
const int BAR_SPACING = 1;
void drawBar(int x, int height, COLORREF color) {
setfillcolor(color);
bar(x, WINDOW_HEIGHT - height, x + BAR_WIDTH, WINDOW_HEIGHT);
}
void drawArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
drawBar(i * (BAR_WIDTH + BAR_SPACING), arr[i], WHITE);
}
}
void insertionSort(int arr[], int size) {
for (int i = 1; i < size; i++) {
int j = i;
while (j > 0 && arr[j] < arr[j - 1]) {
// swap arr[j] and arr[j - 1]
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
j--;
}
}
}
int main() {
// 初始化图形窗口
initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);
// 随机生成数组
srand(time(NULL));
const int ARRAY_SIZE = WINDOW_WIDTH / (BAR_WIDTH + BAR_SPACING);
int arr[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; i++) {
arr[i] = rand() % BAR_HEIGHT;
}
// 排序并可视化展示过程
drawArray(arr, ARRAY_SIZE);
Sleep(1000);
insertionSort(arr, ARRAY_SIZE);
drawArray(arr, ARRAY_SIZE);
// 等待用户输入并关闭图形窗口
getch();
closegraph();
return 0;
}
```
代码中使用了easyX图形库进行可视化展示,通过随机生成一个数组,并在插入排序过程中不断更新可视化展示,最终展示排序后的结果。如果需要运行代码,请确保已安装easyX库并正确配置开发环境。
c语言直接插入排序easyx
下面是一个使用C语言和EasyX图形库实现直接插入排序的示例代码:
```c
#include <graphics.h>
#include <conio.h>
// 直接插入排序
void InsertSort(int a[], int n)
{
int i, j, temp;
for (i = 1; i < n; i++)
{
temp = a[i];
for (j = i - 1; j >= 0 && a[j] > temp; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
int main()
{
// 初始化图形窗口
initgraph(640, 480);
// 创建随机数组
int a[20], i;
for (i = 0; i < 20; i++)
{
a[i] = rand() % 400 + 40;
}
// 绘制初始状态的数组
setbkcolor(WHITE);
cleardevice();
settextcolor(BLACK);
settextstyle(20, 0, _T("宋体"));
for (i = 0; i < 20; i++)
{
rectangle(i * 30 + 40, 450, i * 30 + 60, 450 - a[i]);
_stprintf_s(temp, _T("%d"), a[i]);
outtextxy(i * 30 + 45, 460, temp);
}
// 执行直接插入排序
InsertSort(a, 20);
// 绘制排序后的数组
settextcolor(RED);
for (i = 0; i < 20; i++)
{
rectangle(i * 30 + 40, 450, i * 30 + 60, 450 - a[i]);
_stprintf_s(temp, _T("%d"), a[i]);
outtextxy(i * 30 + 45, 460, temp);
}
// 等待用户按任意键结束程序
_getch();
closegraph();
return 0;
}
```
这个示例代码中,我们首先使用EasyX图形库创建了一个640x480的窗口,然后生成了一个长度为20的随机数组,并在窗口中绘制出来。接着,我们调用了InsertSort函数对这个数组进行直接插入排序,排序完成后再次在窗口中绘制出排序后的数组。最后等待用户按任意键结束程序。