双向冒泡排序
突发奇想,无聊,无意中看到了冒泡排序,顺手写下了下面一段代码,实现了单向冒泡排序和双向冒泡排序。
#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 ; }