</pre><pre name="code" class="cpp">/*
双向冒泡排序是冒泡排序的变形,每次排序的时候都把最大的元素放在尾部,最小的元素放在头部
*/
#include<stdio.h>
#include<iostream>
using namespace std;
void CocktailSort(int *a,int nsize)
{//从小到大
int tail=nsize-1; ///tail开始的长度为数组的长度减1
for (int i=0;i<tail;)
{
for (int j=tail;j>i;--j) ///第一轮,先将最小的数据排到前面
{
if (a[j]<a[j-1])
{
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
++i; ///原来i处数据已排好序,加1
///由于tail最长为数组的长度减1,所以不用担心数组访问会越界
for (int j=i;j<tail;++j) ///第二轮,将最大的数据排到后面
{
if (a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
tail--; ///原tail处数据也已排好序,将其减1
}
}
int main()
{
int a[10];
for(int i = 0; i < 10; i ++)
scanf("%d",&a[i]);
CocktailSort(a,10);
for(int i = 0; i < 10; i ++)
cout << a[i] << " ";
cout << endl;
return 0;
}
鸡尾酒排序(双向冒泡排序)
最新推荐文章于 2023-05-25 09:51:17 发布