1.前言
双向冒泡排序是在冒泡排序
(单击前往查看)的基础上加以改进得出的.
冒泡排序:从左端开始依次左右相邻相邻两个元素比较
双向冒泡排序:左右两侧都进行比较,大的数向右移动,小的数向左移动
2.实现步骤
#include <stdio.h>
//void BubbleSort(int a[], int sz) //冒泡排序
//{
// int i, j;
// for (i = 0; i < sz - 1; i++)
// {
// for (j = 0; j < sz - 1 - i; j++)
// {
// if (a[j] > a[j + 1])
// {
// int temp = a[j];
// a[j] = a[j + 1];
// a[j + 1] = temp;
// }
// }
// }
//}
void swap(int *a, int *b) //交换函数
{
int t = *a;
*a = *b;
*b = t;
}
void SecBubbleSort(int a[], int sz) //双向冒泡排序
{
int i, j, LeftIndex=0, RightIndex=sz-1,temp=1; //初始化变量
while (LeftIndex < RightIndex)
{
for (i = LeftIndex; i < RightIndex; i++) //向右排序
{
if (a[i] > a[i + 1])
{
swap(&a[i], &a[i + 1]);
temp = i; //记录此时的i值
}
}
RightIndex = temp;
for (i = RightIndex-1; i >= LeftIndex; i--) //同理 向左排序
{
if (a[i] > a[i + 1])
{
swap(&a[i], &a[i + 1]);
temp = i+1; //记录交换后的后一个数
}
}
LeftIndex = temp;
}
}
int main()
{
int a[] = { 1,6,9,8,3,6,4 };
int sz = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < sz; i++)
printf("%d ", a[i]);
printf("\n");
/*BubbleSort(a, sz);*/ //冒泡排序
SecBubbleSort(a, sz); //双向冒泡排序
for (int i = 0; i < sz; i++)
printf("%d ", a[i]);
return 0;
}
3.总结
算法依旧是稳定的,效率有所提升,但仍有限。
4.更新日志
2022.2.26 整理上传(C)
欢迎交流、补充、指正~~