两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

歸并排序算法是在分治算法基礎(chǔ)上設(shè)計出來的一種排序算法,它可以對指定序列完成升序(由小到大)或降序(由大到?。┡判?,對應(yīng)的時間復(fù)雜度為O(nlogn)。


(1)算法思路

歸并排序算法實現(xiàn)排序的思路是:

1. 將整個待排序序列劃分成多個不可再分的子序列,每個子序列中僅有 1 個元素;

2. 所有的子序列進行兩兩合并,合并過程中完成排序操作,最終合并得到的新序列就是有序序列。


(2)動圖演示

歸并排序算法


(3)歸并排序的特性總結(jié):

 1. 歸并的缺點在于需要O(N)的空間復(fù)雜度,歸并排序的思考更多的是解決在磁盤中的外排序問題。

 2. 時間復(fù)雜度:O(N*logN)

 3. 空間復(fù)雜度:O(N)

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


(4)C語言代碼實現(xiàn)如下:

#include<stdio.h>
#include<stdlib.h>

void Merge(int arr[], int tmp[], int start,int mid, int end)//合并小組并排序
{
	int i = start;//i標識//左小組的第一個元素位置
	int j = mid + 1;//j標識//右小組的第一個元素位置
	int k = start;//tmp當(dāng)前小組存放的起始位置
	while (i < mid + 1 && j < end + 1)//左小組越界或右小組越界才能退出
	{
		if (arr[i] <= arr[j])
		{
			tmp[k++] = arr[i++];
		}
		else
		{
			tmp[k++] = arr[j++];
		}
	}

	while (j < end + 1)//如果右邊小組沒有越界
	{
		tmp[k++] = arr[j++];
	}

	while (i < mid + 1)//如果左邊小組沒有越界
	{
		tmp[k++] = arr[i++];
	}//哦哦就是補齊了,把數(shù)組放到新的那個臨時數(shù)組中去了

	for (i = start; i <= end; i++)
	{
		arr[i] = tmp[i];
	}//至此,原來的數(shù)組已經(jīng)排序完畢
}

void MergeS(int arr[], int tmp[], int start, int end)//劃分小組,現(xiàn)在沒有end.
{
	if (start < end)
	{
		int mid = (start+end)/2;
		MergeS(arr, tmp, start, mid);
		MergeS(arr, tmp, mid + 1, end);//自我遞歸調(diào)用
		Merge(arr, tmp, start, mid, end);//現(xiàn)在就全部排號
	}
}//就是遞歸調(diào)用唄

void MergeSort(int arr[], int len)
{
	int *tmp = (int *)malloc(sizeof(int)*len);//開了一個排序后結(jié)果保存的臨時數(shù)組
	MergeS(arr, tmp, 0, len - 1);//嵌套調(diào)用
	free(tmp);
}

int main()
{
	int arr[] = { 12, 3, 21, 32, 1, 34, 12, 35, 34 };//舉例子
    //int s,arr[100];
    //scanf("%d",&s);
    //for(int i=0;i<s;i++)
    //{
     //   scanf("%d ",&arr[i]);
    //}
	int len = sizeof(arr) / sizeof(arr[0]);
	MergeSort(arr, len);
	for (int i = 0; i < len; i++)
	{
		printf("%d  ", arr[i]);
	}
	printf("\n");
	return 0;
}

如果我們編譯并運行上述程序,那么它應(yīng)該產(chǎn)生以下結(jié)果:

1  3  12  12  21  32  34  34  35


點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)