排序算法:冒泡排序(带标记)

来源:互联网 发布:我的世界linux启动器 编辑:程序博客网 时间:2024/06/06 00:30

查找排序算法时,找到一个种带标记的冒泡排序算法,它的优势是对于后部已经排好序的的数列,节省了继续向后比较的操作。

带标记的冒泡排序算法:在一次排序中,标记出最后一次进行交换元素的位置,在下次排序中,只需要比较到这个标记位置,因为后面的元素已经排好序。


C++实现

#include <iostream>#include <vector>using namespace std;template<typename T> void BubbleSort(vector<T> &vec);int main(){int arr[] = {8, 3, 10, 49, 2, 6, 13, 5, 14, 7, 51, 53, 55};vector<int> vec(&arr[0], &arr[13]);BubbleSort(vec);return 0;}template<typename T>void BubbleSort(vector<T> &vec){int VSize = vec.size();if (VSize < 1)return;if (1 == VSize){cout << "Only one element in array: " << vec[0] << endl;return;}int pos = VSize - 1;for (int vIdx = 0; vIdx < VSize-1; vIdx++){//for (int uIdx = 0; uIdx < (VSize - vIdx - 1); uIdx++)int newPos = 0;for (int uIdx = 0; uIdx < pos; uIdx++) // pos{if (vec[uIdx] > vec[uIdx + 1]){vec[uIdx] ^= vec[uIdx + 1];vec[uIdx + 1] ^= vec[uIdx];vec[uIdx] ^= vec[uIdx + 1];newPos = uIdx + 1;}}}for (int vIdx = 0; vIdx < VSize; vIdx++){cout << "value in " << vIdx << " is " << vec[vIdx] << endl;}return;}


0 0
原创粉丝点击