冒泡排序
作用: 最常用的排序算法,對數組內元素進行排序
步驟
1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2. 對每一對相鄰元素做同樣的工作,執行完畢後,找到第一個最大值。
3. 重複以上的步驟,每次比較次數-1,直到不需要比較
注意兩個循環參數
第一個:排序總輪數等於數組中元素個數減一;
第二個:每輪比較次數等於數組中元素個數減一再減去第幾輪次;
void sort_maopao(int aa[], int len)
{
cout << "冒泡排序前" << endl;
for (int i = 0; i < len; i++)
{
cout << aa[i];
}
cout << endl;
//冒泡排序
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (aa[j] > aa[j + 1])
{
int tmp = aa[j];
aa[j] = aa[j + 1];
aa[j + 1] = tmp;
}
}
}
cout << "冒泡排序後" << endl;
for (int i = 0; i < len; i++)
{
cout << aa[i];
}
cout << endl;
}
注意要點
如果寫一個傳數組的函數,卻不傳遞數組長度,那麼在函數裏計算數組的長度時,我們會發現長度的值一直是2,因爲,數組名a是函數參數,到了本函數中,數組名a只是一個指針(地址,系統在本函數運行時,是不知道a所表示的地址有多大的數據存儲空間,這裏只是告訴函數:一個數據空間首地址),所以,sizoef(a)的結果是指針變量a佔內存的大小,一般在64位機上是8個字節。int類型是4個字節,所以,結果永遠是2,因此,我們要向獲取數組長度要怎麼辦呢,可以在初始化數組的地方獲取到數組的長度,作爲參數傳遞過來:
void sort_maopao(int aa[])
{
cout << "冒泡排序前" << endl;
int len=sizeof(&aa)/ sizeof(int);
for (int i = 0; i < len; i++)
{
cout << aa[i];
}
cout << endl;
//冒泡排序
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (aa[j] > aa[j + 1])
{
int tmp = aa[j];
aa[j] = aa[j + 1];
aa[j + 1] = tmp;
}
}
}
cout << "冒泡排序後" << endl;
for (int i = 0; i < len; i++)
{
cout << aa[i];
}
cout << endl;
}