双向冒泡排序

来源:互联网 发布:网络舆情应急预案 编辑:程序博客网 时间:2024/05/16 14:19

双向冒泡排序


突发奇想,无聊,无意中看到了冒泡排序,顺手写下了下面一段代码,实现了单向冒泡排序和双向冒泡排序。

#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){//更新righttmp = 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 ;//更新lefttmp = 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 ;}


0 0
原创粉丝点击