真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

排序小結(jié)sort

排序小結(jié)

成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供麥積網(wǎng)站建設(shè)、麥積做網(wǎng)站、麥積網(wǎng)站設(shè)計(jì)、麥積網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、麥積企業(yè)網(wǎng)站模板建站服務(wù),10多年麥積做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

排序算法是基礎(chǔ)之基礎(chǔ)。在這里小結(jié)一下。方便自己查閱和學(xué)習(xí)。

1.冒泡排序(BubbleSort)

思想:比較相鄰的兩個(gè)元素,如果前面的元素大于后面的元素,交換之。

思路:采用雙層循環(huán)。外循環(huán)控制要處理多少趟。里面循環(huán)用來(lái)做元素的交換操作。注意上下界。

穩(wěn)定性:穩(wěn)定

時(shí)間復(fù)雜度:O(n2)

void bubbleSort(int a[], int size)
{
	int tmp;
	for (int i = 0; i < size; i++)
	{	//每一趟都會(huì)把最大的元素放入最右邊的位置
		//最右邊的位置會(huì)一點(diǎn)點(diǎn)往左移動(dòng)
		for (int j = 0; j < size - i - 1; j++)
		{
			if (a[j] > a[j + 1])
			{
				tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}
}

2.快速排序(quickSort)

思想:找到第一個(gè)元素的最終位置,然后對(duì)數(shù)組進(jìn)行分割,對(duì)左邊的進(jìn)行快排,對(duì)右邊的進(jìn)行快排。

思路:采用遞歸,需要一個(gè)輔助函數(shù)findPos()來(lái)找到某一個(gè)元素的最終位置。

穩(wěn)定性:不穩(wěn)定

時(shí)間復(fù)雜度:有時(shí)O(nlogn),最壞情況是已經(jīng)排好序,這樣時(shí)間復(fù)雜度為O(n2)

偽算法

/*

 * 快速排序(偽算法) 2016-08-14 11:01:34

 * 1.先找到第一個(gè)元素的最終位置

 * 2.對(duì)第一個(gè)元素的最終位置之前的元素,進(jìn)行快速排序。

 * 3.對(duì)第一個(gè)元素的最終位置之后的元素,進(jìn)行快速排序。

 *

*/

int findPos(int a[],int low,int high)
{	
	int val = a[low];
	while(low < high)
	{
		//因?yàn)関al取的是最前面的值,所以先從后往前遍歷比較
		while(low < high && a[high] >= val)
			high--;
		a[low] = a[high];//將后面較小值賦值給前面已經(jīng)做好備份的位置上
		//然后從前往后遍歷比較
		while(low < high && a[low] <= val)
			low++;
		a[high] = a[low];//將前面較大值賦值給后面已經(jīng)做好備份的位置上
	}
	a[low] = val;
	return low;
}

void quickSort(int a[],int low,int high)
{
	if(low < high)
	{
		int pos = findPos(a,low,high);
		quickSort(a,low,pos-1);
		quickSort(a,pos+1,high);
	}
}

3.直接插入排序(insertSort)也叫選擇插入排序

思想:將第i個(gè)元素插入到前面i-1個(gè)已排好序的記錄中。直到所有的元素都排一次。

思路:見(jiàn)偽算法

穩(wěn)定性:穩(wěn)定

時(shí)間復(fù)雜度:O(n2)

偽算法

/*

* 插入排序(偽算法) 2016-08-14 12:23:09

* 1. 將相鄰的兩個(gè)元素比較,如果前面的數(shù)大于后面的數(shù),則交換。

*    直到找到前面的數(shù)小于后面的,就把這個(gè)值插入到這個(gè)位置。

* 2. 循環(huán)1,直到所有的元素都有序排列。

*

*/

void insertSort(int a[], int size)
{
	int i, j, tmp;
	for (i = 0; i < size; i++)
	{
		tmp = a[i];
		for (j = i - 1; j >= 0 && a[j] > tmp; j--)
		{
			a[j+1] = a[j];
		}
		a[j + 1] = tmp;
	}
}

4.選擇排序(selectSort)

思想:每一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在待序列的起始位置。 

思路:見(jiàn)偽算法

穩(wěn)定性:不穩(wěn)定

時(shí)間復(fù)雜度:O(n2)

偽算法

/*

* 選擇排序(偽算法) 2016-08-14 13:08:50

* 1. 工作原理是每一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€(gè)元素,存放在待序列的起始位置。 

* 2. 循環(huán)1,直到全部待排序的數(shù)據(jù)元素排完。

*

*/

void selectSort(int a[], int size)
{
	int currentSmallIndex;//記錄待排序隊(duì)列中最小元素的下標(biāo)
	int tmp;//記錄最小元素的大小
	for (int i = 0; i < size; i++)
	{
		tmp = a[i];
		currentSmallIndex = i;
		for (int j = i + 1; j < size; j++)
		{
			if (a[j] < tmp)
			{
				currentSmallIndex = j;
				tmp = a[j];
			}
		}
		a[currentSmallIndex] = a[i];
		a[i] = tmp;
	}
}

5.歸并排序(mergeSort)

思想:將數(shù)組遞歸分成2半,知道數(shù)組的長(zhǎng)度為1,然后將分成2半的數(shù)組合并。

思路:需要使用輔助函數(shù)merge()來(lái)合并

穩(wěn)定性:穩(wěn)定

時(shí)間復(fù)雜度:O(n2)

偽算法

/*

1.將數(shù)組分成左右兩半

2.遞歸1,直道只剩1個(gè)元素的時(shí)候,然后合并。

 */

void merge(int a[], int start, int end)
{
	int mid = (start + end) / 2;
	int left, right;
	int * temp = new int[end - start + 1];

	int k = 0;//臨時(shí)數(shù)組的下標(biāo)
	left = start;
	right = mid + 1;

	while (left <= mid && right <= end)
	{
		while ((left <= mid && right <= end) && (a[left] < a[right]))
			temp[k++] = a[left++];

		while ((left <= mid && right <= end) && (a[right] < a[left]))
			temp[k++] = a[right++];
	}

	while (left <= mid)
		temp[k++] = a[left++];

	while (right <= end)
		temp[k++] = a[right++];

	//將臨時(shí)數(shù)組中的元素,找到原數(shù)組的位置,按位賦值過(guò)去。
	//這里需要注意原數(shù)組的起始位置是start,而不是0
	for (int i = start, k = 0; i <= end; i++, k++)
		a[i] = temp[k];

	delete[] temp;
}

void mergeSort(int a[], int start, int end)
{
	if (start < end)
	{
		int mid = (start + end) / 2;
		mergeSort(a, start, mid);	//左數(shù)組合并排序
		mergeSort(a, mid + 1, end);	//右數(shù)組合并排序
		merge(a, start, end);		//整體排序
	}
}

排序總結(jié)未完待續(xù)。

2016-08-14 16:11:27


當(dāng)前文章:排序小結(jié)sort
標(biāo)題來(lái)源:http://weahome.cn/article/jgphjj.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部