C语言实现冒泡排序算法

新人新气象,又一个学习C的新人来了。

冒泡排序,基础中的基础,原理不啰嗦了。

代码中display()为数组展示函数,sort_bubble()为直接实现排序,details()为带动画展示。

伪代码:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#define LENGTH 20

const WORD FORE_BLUE = FOREGROUND_BLUE|FOREGROUND_INTENSITY;
const WORD FORE_GREEN = FOREGROUND_GREEN|FOREGROUND_INTENSITY;
const WORD FORE_RED = FOREGROUND_RED|FOREGROUND_INTENSITY;
const WORD FORE_WHITE = FOREGROUND_RED | FOREGROUND_GREEN|FOREGROUND_BLUE;

void sort_bubble(int *a);
void display(int *a);
void details(int *a);

void display(int *a)
{
int i;
for (i=0;i<LENGTH;i++)
{
printf("%2d ",a[i]);
}
printf("\n");
}

void sort_bubble(int *a)
{
int i,j,k,temp;
for (i=0;i<LENGTH-1;i++)
{
k=0;
for (j=0;j<LENGTH-i-1;j++)
{
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
k++;
}

}
if (k==0)
{
break;
}
}
}
int main()
{
int array[LENGTH]={20,62,30,50,80,37,40,22,55,44,
77,85,18,44,90,73,26,10,46,64};
int array2[LENGTH]={20,62,30,50,80,37,40,22,55,44,
77,85,18,44,90,73,26,10,46,64};
printf("Before sort:\n");
display(array);
sort_bubble(array);
printf("Success sort:\n");
display(array);
printf("Press to display details:\n");
getch();
details(array2);
getch();
return 0;
}

void details(int *a)
{
int i,j,k,temp;
HANDLE outhandle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD xy={0,0};
xy.Y=5;
display(a);
for (i=0;i<LENGTH-1;i++)
{
k=0;
for (j=0;j<LENGTH-i-1;j++)
{
Sleep(100);
xy.X=j*3;
SetConsoleTextAttribute(outhandle, FORE_RED);
SetConsoleCursorPosition(outhandle,xy);
printf("%2d %2d",a[j],a[j+1]);
if (a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
Sleep(100);
xy.X=j*3;
SetConsoleCursorPosition(outhandle,xy);
printf(" ");
SetConsoleCursorPosition(outhandle,xy);
printf("%2d %2d",a[j],a[j+1]);
k++;
}
Sleep(100);
xy.X=j*3;
SetConsoleCursorPosition(outhandle,xy);
SetConsoleTextAttribute(outhandle, FORE_WHITE);
printf("%2d %2d",a[j],a[j+1]);
}
xy.X=3*(LENGTH-1-i);
SetConsoleCursorPosition(outhandle,xy);
SetConsoleTextAttribute(outhandle, FORE_GREEN);
printf("%2d",a[LENGTH-i-1]);
if (k==0)
{
break;
}
}
xy.X=0;
xy.Y=5;
SetConsoleCursorPosition(outhandle,xy);
SetConsoleTextAttribute(outhandle, FORE_GREEN);
display(a);
CloseHandle(outhandle);
}

猜你喜欢

转载自www.cnblogs.com/lisg001/p/9085922.html