1. 程式人生 > >氣泡排序與簡單排序

氣泡排序與簡單排序

氣泡排序:

氣泡排序改進版本:氣泡排序  通過相鄰點進行比較,每次將最大的一個數字沉底,設定一個標誌位,如果在一次排序中沒有進行交換可以推斷該陣列已經有序,然後退出循化,結束該函式。其空間複雜度複雜度是O(1),最好的情況初始陣列是有序的,一次下來結束O(n),最壞情況就是整個陣列要經過O(n*n)次比較,則此是陣列是倒序時的情況,每一次的循化,陣列中的最後一個值移動到最前面的。

bool bubble(int *arr, int len)
{
	if(arr == NULL || len<1)
	{
		return false;
	}

	for(int i=0; i<len; i++)
	{
		int tag = 0;
		for(int j=0; j<len-1-i; j++)
		{
			if(arr[j] > arr[j+1])
			{
				swap(arr+j, arr+j+1);
				tag = 1;
			}
		}
		if (tag == 0)
		{
			return true;
		}
	}
	return true;
}
選擇排序:

選擇排序 通過每次在剩下的數字中間選出最小的一位,然後將其與剩下的陣列中的第一位進行交換。最好的情況就是順序的,第一個是最小的,但還要通過多次的比較,只是不需要進行交換的操作。最壞的情況就是每次比較後找到該值並且進行交換,其陣列的初始化是亂序或者倒序。

bool select(int *arr, int len)
{
	if (arr == NULL || len < 1)
	{
		return false;
	}

	int j = 0;
	int k = 0;
	for (int i=0; i<len; i++)
	{
		int min = *(arr+i);
		for(j=i; j<len; j++)
		{
			if (min > arr[j])
			{
				min = arr[j];
				k = j;
			}
		}
		swap(arr+i, arr+k);
	}
	return true;
}