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