排序算法學習系列-冒泡排序

冒泡排序

作用: 最常用的排序算法,對數組內元素進行排序

步驟

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章