双向起泡排序算法 C语言
作者:互联网
#include<stdio.h>
#define MAXSIZE 10
//打印函数
void Show(int arr[], int n)
{
int i;
printf("\n\n排序的结果为:\n");
for(i = 0; i < n; i ++ )
printf("%d ",arr[i]);
printf("\n");
}
//交换函数
void Swap(int *num_a, int *num_b)
{
int temp = *num_b;
*num_b = *num_a;
*num_a = temp;
}
//双向起泡排序算法
void BidBubbleSort(int array[], int n)
{
int low, high, flag, i;
low = 0;
high = n - 1;
while(low < high)
{
flag = 0;
for(i = low; i < high; i ++) //正向冒泡
{
if(array[i] > array[i+1]) //找到剩下中最大的
{
Swap(&array[i], &array[i+1]);
flag = 1; //标志, 有数据交换
}
}
if(!flag)
break;
high --;
for(i = high; i > low; i --) //反向冒泡
{
if(array[i] < array[i-1]) //找到剩下中最小的
Swap(&array[i], &array[i-1]);
}
low++;
}
}
int main()
{
int a[MAXSIZE] = {0};
int n;
printf("输入个数\n");
scanf("%d",&n);
printf("输入数组\n");
for(int i = 0; i < n; i ++)
{
scanf("%d",&a[i]);
}
BidBubbleSort(a, n);
Show(a, n);
return 0;
}
标签:起泡,int,C语言,high,num,low,printf,array,排序 来源: https://blog.csdn.net/weixin_47356269/article/details/113795498