国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 插入排序算法之希爾排序+直接插入排序

插入排序算法之希爾排序+直接插入排序

2022-02-24 14:31凜音Rinne C/C++

這篇文章主要介紹了插入排序算法之希爾排序+直接插入排序的相關知識,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

希爾排序

在介紹希爾排序之前,先了解一下直接插入排序

 

一、直接插入排序

1. 單趟排序

x插入一個有序區間

插入排序算法之希爾排序+直接插入排序

這里end是指向數組最后一個元素

插入排序算法之希爾排序+直接插入排序

2. 直接插入排序

根據上面的單趟排序啟發

end是數組的最后一個元素,end之后的元素都是待排序

插入排序算法之希爾排序+直接插入排序

一個關鍵的判斷點,end和x比較大小

這里end < x

還需要再做改善

插入排序算法之希爾排序+直接插入排序

可以發現有兩個循環,一個循環時end倒著遍歷完之后,使得最開始的end結束的數組加入x后是一個有序數組,最后再返回這個新數組的最后一個元素所在位置

注意公共部分

end--;
x = a[end + 1];

外面是一個for循環,從第二個到最后一個元素

for(i = 0; i < n - 1; i++)
{
  
}

代碼:

//插入排序
void InsetSort(int* a, int n)
{
	int end = 0;
	int i = 0;

	for (i = 0; i < n - 1; i++)
	{
		end = i;
		int x = a[end + 1];

		while (end >= 0)
		{
			if (a[end] > x)
			{
				a[end + 1] = a[end];
				a[end] = x;
				
			}
			else
			{
				break;
			}
			end--;
		}
	}
	
}

時間復雜度O(N2)

測試:

int main()
{
	int a[4] = { 2, 6, 5, 3 };
	InsetSort(a, 4);
	//ShellSort(a, 4);

	int i = 0;
	for (i = 0; i < 4; i++)
	{
		printf("%d ", a[i]);

	}
	printf("\n");

	return 0;
}

插入排序算法之希爾排序+直接插入排序

 

二、希爾排序

希爾排序法又稱縮小增量法

希爾排序法的基本思想是:先選定一個整數,把待排序文件中所有記錄分成gap個組,所有距離為的記錄分在同一組內,并對每一組內的記錄進行排序。然后,重復上述分組和排序的工作。當到達gap=1時,所有記錄在統一組內排好序。

希爾排序是根據直接插入排序的基礎上,先進行分組排序

插入排序算法之希爾排序+直接插入排序

以3個為一組進行排序

插入排序算法之希爾排序+直接插入排序

時間復雜度:

每次排可以看作長度為gap的數組直接插入排序

一共有gap組,當然并不是每組都是gap/n個元素,但當數據相當多的時候我們看作每個數組都有gap/n個元素

所以是 (1+2……+n/gap)gap

如果gap = 1,則時間復雜度是O(n2),相當于直接插入排序

//希爾排序
void ShellSort(int* a, int n)
{
	int end = 0;
	int i = 0;
	int j = 0;
	int gap = 6;

	//預排序
	for (j = 0; j < gap; j++)
	{
		//最后一個數一定是1
		gap = gap / 2;
		for (i = 0; i < n - gap; i++)
		{
			end = i;
          //這里其實就是直接插入排序,而數組的每個元素間隔是gap
			int x = a[end + gap];

			while (end >= 0)
			{
				if (a[end] > x)
				{
					a[end + gap] = a[end];
					a[end] = x;

				}
				else
				{
					break;
				}
				end -= gap;
			}
		}

	}
}

測試用例還是上面直接插入排序的例子

結果還是成功的

插入排序算法之希爾排序+直接插入排序

 

三、測試希爾排序和直接插入排序性能

//性能測試
void TestOP()
{
	srand(time(0));
  //以1000個數字為例
	const int N = 10000;
	int* a1 = (int*)malloc(sizeof(int) * N);
	int* a2 = (int*)malloc(sizeof(int) * N);

	for (int i = 0; i < N; ++i)
	{
		a1[i] = rand();
		a2[i] = a1[i];
	}
  //這里clock是運行到這里的時間
	int begin1 = clock();
	InsertSort(a1, N);
	int end1 = clock();

	int begin2 = clock();
	ShellSort(a2, N);
	int end2 = clock();
  //end-begin為排序所用時間
	printf("%d\n%d\n", end1 - begin1, end2 - begin2);
}

插入排序算法之希爾排序+直接插入排序

可以看出希爾排序比直接排序快得多,但希爾排序因為gap可以改變,目前沒有一個統一的時間復雜度,先按照時間復雜度為O(n1.3)來吧

到此這篇關于插入排序算法之希爾排序+直接插入排序的文章就介紹到這了,更多相關插入排序算法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_53656490/article/details/121352903

延伸 · 閱讀

精彩推薦
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产成人精品一区二区在线 | 黄色一级大片在线免费看产 | 日本免费一区二区在线 | 精品综合久久久 | 亚洲五码在线 | 99久久99久久精品 | 免费av电影网站 | 欧美日韩国产一区二区在线观看 | 99久久国| 黄色一级毛片免费看 | 亚洲一区二区三区四区的 | www.av在线.com| 亚洲午夜精品 | a资源在线观看 | 国产视频在线看 | 精品一区二区三区免费视频 | 91精品国产91久久久 | 中文字幕久久精品 | 国产无套丰满白嫩对白 | 精品视频一区二区三区四区 | 精品久久久久久久久久久久久久久久久久久 | 国产视频久久 | 午夜影院| 久久久久久成人 | 午夜视频在线播放 | 女人高潮特级毛片 | 欧美日韩久久精品 | 成人资源在线观看 | 欧美电影免费网站 | 欧洲视频一区 | 理伦影院 | 欧美一区二区精品 | 欧美亚洲高清 | 午夜精品久久久久久久久 | 久久国产综合 | 日韩免费| 久久久精品国产99久久精品芒果 | 久久久www成人免费无遮挡大片 | 波多野结衣三区 | 一区二区三区日韩 | 久久成人久久爱 |