国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ??
??個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn)
?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進階
?? 不能則學,不知則問,恥于問人,決無長進
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

前言:

本篇將開始希爾排序的講解。本篇文章適合剛開始學習希爾排序的同學,總結(jié)的很全面,整理的很清楚,希望能幫到你,加油!

一、希爾定義:

希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法,其也是一種特殊的插入排序,即將簡單的插入排序進行改進后的一個更加高效的版本,也稱 縮小增量排序

二、希爾排序原理

希爾排序的思路是,它通過將待排序的數(shù)組分割成多個子序列來進行排序。然后逐步縮小子序列的規(guī)模,最終進行一次插入排序,從而實現(xiàn)將整個數(shù)組排序的目的,當被排序的對象越接近有序時,插入排序的效率越高。希爾排序利用這一特點,通過將數(shù)組變得接近有序,從而提高插入排序的效率。

三、希爾排序原理圖

gap值的計算公式:gap=n/3+1;

1.gap為3:

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
三組分別進行排序,將較小值換到左邊。
【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
是不是看起來就有序多了。繼續(xù)縮小gap的值。

2.gap為2:

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
第一組:1,8,7
第二組:4,5,9
對兩組進行排序:
【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
看起來更加有序了。繼續(xù)縮小gap的值。

3.gap為1:

當gap=1時,就相當于插入排序;
【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
排序后:就是一個有序數(shù)組了。
【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

插入排序【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

四、細節(jié)剖析

我們分析一下gap=2時的具體排序過程:

圖中的 tmp>end 指的是 a[tmp] 和 a[end]

第1步:i=0; a[tmp] > a[end]不做交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
i++;

第2步:i=1; a[tmp] > a[end]不做交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
i++;

第3步:i=2; a[tmp] < a[end]交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
在這里就會有一些變化了,end在比較交換完后會執(zhí)行語句 end -= gap ; 所以,end會繼續(xù)向前移動gap個位置,再次進行比較交換。從而看起來像是0,2,4位置為一組。

第3步:</fonti=2; a[tmp] > a[end] 不交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法
i++;

第5步:i=3; a[tmp] > a[end]不交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

第6步:i=3; a[tmp] > a[end]不交換

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

停止

i++;這里i的值為4,不滿足執(zhí)行條件 n - gap;退到外層循環(huán),gap的值縮小為1;

五、代碼展示:

//希爾排序
//從下標0開始,從0+gap步開始,進行插入排序,
//每次選擇一個使用遍歷向前尋找是否有比他小的記下位置,最后交換
void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		for (int i = 0; i < n - gap; i++)
		{
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				//不符合就向后移動,已經(jīng)保存到tmp中,不用擔心被覆蓋
				if (tmp < a[end])
				{
					a[end+gap] = a[end];
					end -=gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

六、測試結(jié)果

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法

七、 時間復(fù)雜度

【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序,數(shù)據(jù)結(jié)構(gòu)與算法,數(shù)據(jù)結(jié)構(gòu),排序算法,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-721048.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)--八大排序】之希爾排序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】十大經(jīng)典排序算法-希爾排序

    ?? 個人博客: www.hellocode.top ?? Java知識導航: Java-Navigate ?? CSDN: HelloCode. ?? 知乎 :HelloCode ?? 掘金 :HelloCode ?如有問題,歡迎指正,一起學習~~ 希爾排序是一種插入排序的改進版本,旨在解決插入排序在處理大規(guī)模數(shù)據(jù)時的效率問題。通過將數(shù)組分為多個子序列并對

    2024年02月12日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)與算法:插入排序&希爾排序

    數(shù)據(jù)結(jié)構(gòu)與算法:插入排序&希爾排序

    假設(shè)現(xiàn)在你有一個有序的數(shù)組,你要把一個數(shù)據(jù)插入到數(shù)組中,保證插入后依然有序,要怎么做? 對于人來說,這個問題就像是在整理撲克牌,瞄一眼就知道應(yīng)該插入什么位置。但是對于程序來說,就需要一一對比,直到找到一個位置 左邊比它大,右邊比它小 ,就算找到了

    2024年01月17日
    瀏覽(38)
  • 數(shù)據(jù)結(jié)構(gòu)之八大排序算法

    數(shù)據(jù)結(jié)構(gòu)之八大排序算法

    排序:所謂排序,就是使一串記錄,按照其中的某個或某些的大小,遞增或遞減的排列起來的操作。 下面是常見的排序算法: 直接插入排序是一種簡單的插入排序法,其基本思想是: 把待排序的元素按其值的大小逐個插入到一個已經(jīng)排好序的有序序列中,直到所有的

    2023年04月14日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】八大排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】八大排序

    初看這些概念可能一臉懵,但是沒有關(guān)系,等下面學完幾種排序之后在來看這些概念非常容易理解。 排序:所謂排序,就是使一串記錄,按照其中的某個或某些的大小,遞增或遞減的排列起來的操作。 穩(wěn)定性:假定在待排序的記錄序列中,存在多個具有相同的

    2024年02月01日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡單選擇排序算法

    【數(shù)據(jù)結(jié)構(gòu)】八大排序之簡單選擇排序算法

    ?? 個人主頁 :修修修也 ?? 所屬專欄 :數(shù)據(jù)結(jié)構(gòu) ?? 操作環(huán)境 : Visual Studio 2022 目錄 一.簡單選擇排序簡介及思路 二.簡單選擇排序的代碼實現(xiàn) 三.簡單選擇排序的優(yōu)化 四.簡單選擇排序的時間復(fù)雜度分析 結(jié)語 簡單選擇排序算法(Simple Selection Sort) 是一種簡單直觀的 選擇排序算

    2024年02月01日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】:插入排序與希爾排序

    ?? 個人主頁 : Quitecoder ?? 專欄 : 數(shù)據(jù)結(jié)構(gòu)與算法 歡迎大家來到初階數(shù)據(jù)結(jié)構(gòu)的最后一小節(jié):排序 排序是一種將一組對象按照某種特定順序重新排列的過程。在計算機科學中,排序是數(shù)據(jù)處理中非常基本且重要的操作,它可以幫助人們更有效地理解和分析數(shù)據(jù)。排序的順序

    2024年03月18日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    【數(shù)據(jù)結(jié)構(gòu)與算法】插入排序和希爾排序

    ? 目錄 一.插入排序? InsertSort 基本思想 動圖演示 ?特性總結(jié) 二.希爾排序? ShellSort 基本思想 圖例 特性總結(jié) 基本思想 把待排序的記錄按其關(guān)鍵碼值的大小逐個插入到一個已經(jīng)排好序的有序序列中,直到所有的記錄插入完為止,得到一個新的有序序列 。 當插入第i(i=1)個元素

    2023年04月18日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)】--八大排序算法【完整版】

    【數(shù)據(jù)結(jié)構(gòu)】--八大排序算法【完整版】

    本文主要講解代碼及代碼思路,涵蓋八大排序的全面知識點 ———————————————— 目錄 一、直接插入排序 二、希爾排序(直接插入排序的改良版) 三、選擇排序(直接選擇排序) 四、堆排序 五、冒泡排序 六、快速排序 1、 左右指針法 2、挖坑法: 3、前后指針

    2024年02月16日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】 常見的八大排序算法

    【數(shù)據(jù)結(jié)構(gòu)】 常見的八大排序算法

    排序有 內(nèi)部排序和外部排序 ,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,這里八大排序就是內(nèi)部排序,指直接插入,希爾,選擇,堆排,冒泡,快排,歸并,計數(shù)。 下面讓我們來共同學習這八大排序吧!?????? 什么是外部排序: 外排序是數(shù)據(jù)量較大,內(nèi)存放不下,數(shù)據(jù)放到外

    2024年02月12日
    瀏覽(96)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】排序算法(選擇排序,冒泡排序,插入排序,希爾排序)

    基本概念這了就不浪費時間解釋了,這四種都是很簡單的排序方式,本專欄后續(xù)文章會出歸并排序,計數(shù)排序,快速排序,堆排序,桶排序等排序算法,今天這篇文章中給出選擇排序,冒泡排序,插入排序和希爾排序的實現(xiàn); 如果發(fā)現(xiàn)文章中有錯誤,還請大家指出來,我會非

    2024年02月15日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包