排序演算法:氣泡排序(帶標記)
阿新 • • 發佈:2019-01-05
查詢排序演算法時,找到一個種帶標記的氣泡排序演算法,它的優勢是對於後部已經排好序的的數列,節省了繼續向後比較的操作。
帶標記的氣泡排序演算法:在一次排序中,標記出最後一次進行交換元素的位置,在下次排序中,只需要比較到這個標記位置,因為後面的元素已經排好序。
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; }