双向冒泡排序
突发奇想,无聊,无意中看到了冒泡排序,顺手写下了下面一段代码,实现了单向冒泡排序和双向冒泡排序。
#include <iostream>
#include <algorithm>
using namespace std ;
int data[128] ;
int dataNum = 0 ;
//单项冒泡排序
void bubbleSortData(int* data, int num)
{
if (data == NULL || num <= 0)
return ;
int right = num - 1 ;
while (right > 0)
{
int tmpRight = 0 ;
for (int i = 0; i < right; ++ i)
if (data[i] > data[i + 1])
{
swap(data[i], data[i + 1]) ;
tmpRight = i ;
}
right = tmpRight ;
}
}
//双向冒泡排序
void doubleBubbleSort(int *data, int num )
{
if (data == NULL || num <= 0) return ;
int left = 0;
int right = num - 1 ;
int tmp = 0 ;
while (left < right)
{
//更新right
tmp = left ;
for (int i = left; i < right; ++ i)
if (data[i] > data[i + 1])
{
swap(data[i], data[i + 1]) ;
tmp = i + 1 ;
}
right = tmp ;
//更新left
tmp = right ;
for (int i = right; i > left; -- i)
if (data[i] < data[i - 1])
{
swap(data[i], data[i -1]) ;
tmp = i - 1 ;
}
left = tmp ;
}
}
void printData(const int *data, const int num)
{
for (int i = 0; i < num; ++ i)
cout << data[i] << " ";
cout << endl;
}
int main( int argc, char** argv)
{
int tmp ;
while (cin >> tmp) //输入一个非数字的字符表示结束
data[dataNum++] = tmp ;
printData(data, dataNum) ;
doubleBubbleSort(data, dataNum) ;
cout << "排序之后的结果" << endl;
printData(data, dataNum) ;
return 0 ;
}