介绍
鸡尾酒排序,名字很好听.不过,这只是一个对冒泡排序的一个改进的算法而已.
这个算法与冒泡排序不同的一点在于,他在冒泡排序从低到高进行一波排序之后,又从高到低进行一波排序,以此类推,因此,这个算法也叫做定向冒泡排序
这个算法与冒泡排序一样,在面对乱序程度较高的数据的时候有着比较差的性能
实现思路
loop
先是从低到高进行排序,比较相邻的两个数,不符合排序要求的就进行顺序调换,
然后是从高到低进行排序,比较相邻的两个数,不符合要求的就进行顺序调换(当然,这里要注意,反向排序的时候,相邻两个数的比较条件的问题)
end
代码实现
CocktailSort.h
class CocktailSort {
private:
void swap(int arr[], int a, int b);
public:
void sort(int arr[], int size);
};
CocktailSort.cpp
#include "CocktailSort.h"
void CocktailSort::swap(int arr[], int a, int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
void CocktailSort::sort(int arr[], int size)
{
int left = 0, right = size - 1;
while (left < right) {
for (int i = left; i < right; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
right--;
for (int i = right; i > left; i--) {
if (arr[i] < arr[i - 1]) {
swap(arr, i, i - 1);
}
}
left++;
}
}
main.cpp
#include<iostream>
#include"CocktailSort.h"
using namespace std;
int main() {
int arr[] = { 1,2,43,31,21,4,53,12,32,44,1,23 };
CocktailSort * cocktailSort = new CocktailSort();
int size = sizeof(arr) / sizeof(int);
cocktailSort->sort(arr, size);
for (int i = 0; i < size; i++) {
cout << arr[i] << " ";
}
int temp;
cin >> temp;
return 0;
}
结果: