算法學習筆記(3)---冒泡排序

冒泡排序是針對少許待排數據的一種有效的排序算法,其思想是很是容易理解的:假設待排的數組長度爲N算法

  1. 比較先後相鄰的兩個數,若是前面數據大於後面數據,則進行交換數組

  2. 將數據進行N-1次比較後,最大的數據就會浮到數組的最後code

  3. 將N=N-1,重複以上的步驟排序

代碼實現爲:博客

int bubbleSort_1(int *arr, int len)
{
	int i,j;
	for (i=0; i<len-1; i++)
		for (j=0; j<len-1-i; j++)
			if (arr[j] > arr[j+1])
				swap(arr[j], arr[j+1]);
	return 0;
}

後來想到這種算法貌似有改進的地方,並且在CSDN的博客上看到確實有改進的地方。好比:5 1 2 3 4 這個數組,在進行第一趟排序後,數組爲1 2 3 4 5,第二趟排序不進行任何交換操做,這說明該排序已是升序,那麼能夠終止第3趟、第4趟排序。這裏只需設置一個flag標籤,判斷第k次是否進行交換,若是沒有則跳出循環,其代碼以下:class

int bubbleSort_2(int *arr, int len)
{
	int i,j;
	bool flag = false;
	for (i=0; i<len-1; i++)
	{
		flag = false;
		for (j=0; j<len-1-i; j++)
			if (arr[j] > arr[j+1])
			{
				swap(arr[j], arr[j+1]);
				flag = true;
			}
		if (!flag)
			break;
	}
	return 0;
}
相關文章
相關標籤/搜索