冒泡排序的改进:鸡尾酒排序
2017-08-03 20:56
176 查看
对于鸡尾酒排序,是冒泡排序的改进版。
思路是先从左往右,把最大的沉底,然后再从右往左,把最小的放在左边,最后停在中间。
下面是程序:
#include <stdio.h>
// 交换函数
void swap (int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
// 打印数组
void printA (int *a, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf ("%4d", a[i]);
}
printf ("\n");
}
int main()
{
int a[10] = {9,6,8,0,3,5,2,4,7,1};
int len = sizeof(a) / sizeof(a[0]);
int i;
int left = 0;
int right = len - 1;
while (left < right)
{
// 从左往右找到一个最大的数放到right的位置
for (i = left; i < right; i++)
{
if (a[i] > a[i+1])
{
swap (a, i, i+1);
}
}
right--;
// 从右往左找到一个最小的数放到left的位置
for (i = right; i > left; i--)
{
if (a[i-1] > a[i])
{
swap (a, i, i-1);
}
}
left++;
}
printA (a, len);
return 0;
}
思路是先从左往右,把最大的沉底,然后再从右往左,把最小的放在左边,最后停在中间。
下面是程序:
#include <stdio.h>
// 交换函数
void swap (int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
// 打印数组
void printA (int *a, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf ("%4d", a[i]);
}
printf ("\n");
}
int main()
{
int a[10] = {9,6,8,0,3,5,2,4,7,1};
int len = sizeof(a) / sizeof(a[0]);
int i;
int left = 0;
int right = len - 1;
while (left < right)
{
// 从左往右找到一个最大的数放到right的位置
for (i = left; i < right; i++)
{
if (a[i] > a[i+1])
{
swap (a, i, i+1);
}
}
right--;
// 从右往左找到一个最小的数放到left的位置
for (i = right; i > left; i--)
{
if (a[i-1] > a[i])
{
swap (a, i, i-1);
}
}
left++;
}
printA (a, len);
return 0;
}
相关文章推荐
- 常用排序算法——鸡尾酒排序(改进的冒泡排序)
- 排序(一)冒泡排序、冒泡改进——鸡尾酒排序、选择排序
- 鸡尾酒排序(改进的冒泡排序)
- 改进冒泡排序——鸡尾酒排序(C++模版技术实现)
- 鸡尾酒排序(双端冒泡排序)
- 冒泡排序的改进算法
- 冒泡排序改进算法(双向起泡)
- 笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)
- 冒泡排序和鸡尾酒排序
- 冒泡排序及其改进
- 【常用排序算法】冒泡排序与冒泡排序优化改进(Java实现)
- 冒泡排序的算法分析与改进
- 冒泡排序的算法分析与改进
- C++ 数据结构与算法:冒泡排序及改进算法
- C++实现改进的冒泡排序
- 冒泡排序改进-1
- 冒泡排序的改进
- 内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 基础算法之排序(1)--冒泡排序 改进
- 鸡尾酒排序(类似冒泡排序)