1. 程式人生 > >排序演算法:氣泡排序(帶標記)

排序演算法:氣泡排序(帶標記)

查詢排序演算法時,找到一個種帶標記的氣泡排序演算法,它的優勢是對於後部已經排好序的的數列,節省了繼續向後比較的操作。

帶標記的氣泡排序演算法:在一次排序中,標記出最後一次進行交換元素的位置,在下次排序中,只需要比較到這個標記位置,因為後面的元素已經排好序。

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;
}