1. 程式人生 > >C++氣泡排序

C++氣泡排序

2016年5月22日 星期天 天氣:晴 陰曆四月十六

氣泡排序(BubbleSort)

氣泡排序,依次比較相鄰的兩個數,小放前,大放後。第一趟,將最大的一個數放最後;第二趟,將第二大的數放在最大數的前面;依次類推。

舉例:

隨機產生十個0-100以內的數字,用氣泡排序法排序。

/* 氣泡排序 - 上海 - 豐哥 - 2016-5-22 21:52:28*/ #include #include #include <time.h> //生成種子

/獲取目標資料/ void GetDatas(std::vector& vec_datas, int iMaxSize, int iMaxNum);

/獲取排序後的資料/ void GetResult(std::vector& vec_datas);

/列印資料/ void PrintDatas(std::vector& vec_datas);

int main() { int i = 0;

std::vector<int> vec_datas;	//目標資料

GetDatas(vec_datas, 10, 100);	//產生10個隨機數

std::cout << "隨機產生10個數字:" << std::endl;
PrintDatas(vec_datas);

GetResult(vec_datas);	//排序

std::cout << "氣泡排序後的結果:" << std::endl;
PrintDatas(vec_datas);

std::cin >> i;	//讓程式暫停。
i = -1;

return 0;

}

void GetDatas(std::vector& vec_datas, int iMaxSize, int iMaxNum) { /生成種子,產生資料/

//生成種子
srand((unsigned)time(NULL));

//產生資料(0到iMaxNum-1之間的一個數)
for (int i=0; i<iMaxSize; i++)
{		
	vec_datas.push_back(rand() % iMaxNum);
}
return;

}

void GetResult(std::vector& vec_datas) { for (int i=0; i<(int)vec_datas.size(); i++) { //每一趟都把最大的一個數排後面。 for (int j=0; j<(int)vec_datas.size()-i-1; j++) { if (vec_datas[j] > vec_datas[j+1]) { int iTmp = vec_datas[j]; vec_datas[j] = vec_datas[j + 1]; vec_datas[j + 1] = iTmp; } } } return; }

void PrintDatas(std::vector& vec_datas) { for (int i=0; i<(int)vec_datas.size(); i++) { std::cout << vec_datas[i] << " "; } std::cout << std::endl; }