1. 程式人生 > >若幹排序算法簡單匯總(一)

若幹排序算法簡單匯總(一)

基本上 down 轉載 下載地址 後序 來看 分析 並且 復雜度

轉載請註明出處

http://blog.csdn.net/pony_maggie/article/details/35819279


作者:小馬


從題目看,首先不是所有是若幹。

排序算法非常多。我個人的能力也有限。不可能都講到。另外,是簡單匯總,是希望能用最簡單的代碼,最簡短的語言說明問題,不搞太多理論分析。

就像前面說的。排序算法有非常多,並且不存在哪一種最不好。哪一種最好這種說法。依據用途不同選擇最適合的即可了。只是僅從時間復雜度來看。基本上有兩種。一種是O(n^2), 一種是O(nlogn)。

所謂的時間復雜度,事實上是基於多少次基本操作定義的,在排序算法中,基本操作指兩類,一是比較,二是記錄從一個位置移動還有一個位置

以下講到的排序算法都會涉及到這些操作。

一直接插入排序

先從一個最簡單的切入。它的思種是這種。把一個數插入到已排好的序列中。比方已有一個有序序列:

{ 12, 23, 25, 40}

如今有一個數18要插入進來,而且保證插入後序列還是有序。18開始和序列中的全部數逐一比較(從右向左比較),比40小。40後移,比25小,25後移,比23小,23後移。跟12比,發現比12大,停在這裏,插入到23的位置,終於變為:

{ 12, 18, 23, 25, 40}

上面的過程叫一趟插入排序,基於這個思想, 我們能夠覺得數組第一個元素是有序的。所以能夠從第二個元素開始。每一個元素都做一趟插入排序就能夠得到一個有序序列。代碼就非常easy了,

int insertSort(int nArray[], int nLength)
{
	int i = 0;
	int j = 0;
	int nSerity = 0;//備份要插入的那個元素

	for (i = 1; i < nLength; i++)
	{
		if (nArray[i] < nArray[i-1])
		{
			nSerity = nArray[i];
			nArray[i] = nArray[i-1];
			for (j = i-2; (j >= 0)&&(nSerity < nArray[j]); j--)
			{
				nArray[j+1] = nArray[j];
			}
			nArray[j+1] = nSerity;
		}
	}
	return 0;
}
非常easy看出它的時間復雜度是O(n^2)

二冒泡排序

這個排序算法基本是大學老師必講的。由於它除了簡單之外,也確實比較好玩。思路是這種。一個無序序列a[n], a[1]和a[2]比較,假設a[1]>a[2], 它們就交換位置。否則不做處理。繼續a[2]和a[3]相同的原理比較,一直到a[n-1]和a[n]比較。

上面的過程叫一趟冒泡,請你在腦海裏想像下這個過程。我以下要說的這個結論希望你能想明確,那就是經過一趟冒泡後,序列中最大的那個元素已經被換到a[n]的位置了。

有沒有認為這個過程就像冒泡一樣,僅僅只是這個泡是向下冒的。

做第二趟冒泡時,僅僅要對a[1]~a[n-1]操作即可了。結果是序列中第二大的那個元素在a[n-1]的位置了。

然後經過n趟冒泡後,排序就完畢了。

通過上面的過程也非常easy得出冒泡排序的時間復雜度是O(n^2)。能夠上代碼了,

//bChange作用是為了對於已排好序的序列,能
//及時退出來。
int bubbleSort(int nArray[], int nLength)
{
	int i = 0;
	int j = 0;
	int nTemp = 0;

	bool bChange = true;
	for (i = 0; (i < nLength) &&(bChange); i++)
	{
		bChange = false;
		for (j = 0; j < (nLength - i - 1); j++)
		{
			if (nArray[j] > nArray[j+1])
			{
				nTemp = nArray[j];
				nArray[j] = nArray[j+1];
				nArray[j+1] = nTemp;
				bChange = true;
			}
		}
	}

	return 0;
}
能夠好好理解一下代碼中bChange變量的作用,這裏不多說解釋了,留給大家思考。


這篇就打算寫這麽多了,主要篇幅太長怕大家看著厭煩,過幾天有空了再接著寫吧。

代碼下載地址:

http://download.csdn.net/detail/pony_maggie/7568971

https://github.com/pony-maggie/SortDemo

若幹排序算法簡單匯總(一)