中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

江蘇建設(shè)網(wǎng)站bt磁力兔子引擎

江蘇建設(shè)網(wǎng)站,bt磁力兔子引擎,宜昌教育云網(wǎng)站建設(shè),成都優(yōu)化網(wǎng)站廠家插入排序每次只能將數(shù)據(jù)移動(dòng)一位。 已知插入排序代碼為: def insert_sort(a):for i in range(1,len(a)):ji-1while j>0 and a[j]>a[i]:a[j1]a[j]j-1a[j1]a[i]return a希爾排序在插入排序的基礎(chǔ)上,將數(shù)據(jù)移動(dòng)n/2,n/4,…,1位。 for i in range(ga…

在這里插入圖片描述
插入排序每次只能將數(shù)據(jù)移動(dòng)一位。

已知插入排序代碼為:

def insert_sort(a):for i in range(1,len(a)):j=i-1while j>=0 and a[j]>a[i]:a[j+1]=a[j]j-=1a[j+1]=a[i]return a

希爾排序在插入排序的基礎(chǔ)上,將數(shù)據(jù)移動(dòng)n/2,n/4,…,1位。

for i in range(gap, n):

temp = a[i]:把a(bǔ)[i]的值賦給temp,用于比較

j = i j指針從i開始,表示的是從后往前遍歷比大小的下標(biāo)。

當(dāng)j >= gap(為了確保后面的j-gap下標(biāo)還在數(shù)組索引里,不會(huì)超出范圍) and a[j - gap] > temp(j-temp對(duì)應(yīng)的數(shù)大于j對(duì)應(yīng)的數(shù),把j-gap的數(shù)放到原來的j的位置,然后再往前對(duì)比):

此時(shí)j下標(biāo)對(duì)應(yīng)的數(shù)是原來j-gap對(duì)應(yīng)的數(shù):
a[j] = a[j - gap]

因?yàn)楦鶕?jù)插入排序原理,把要插入的數(shù)的大小temp跟前面已經(jīng)排序好的數(shù)以步長為1( j -= 1)從后往前進(jìn)行對(duì)比,希爾排序也是把要插入的數(shù)的大小temp跟前面已經(jīng)排序好的數(shù)從后往前對(duì)比,但是是以步長為gap往前遍歷。所以: j -= gap

跳出while循環(huán)的條件是已經(jīng)把前面gap步長遇到的所有值排好序了,而且原來的a[j]=a[j-gap]是把j-gap比temp大的值放到了j的位置,那原來的j-gap的位置就空了出來,j-=gap操作后,原來的j-gap就是新的j的位置,把temp放到這個(gè)位置:a[j] = temp。實(shí)現(xiàn)了如果a[j - gap] > temp(a[i]),那么交換位置的操作。

gap //= 2不斷縮小步長,直到gap=1跟插入排序一致,此時(shí)所有數(shù)據(jù)順序都排好了。

比如有一組示例數(shù)據(jù)如下

7291546

a數(shù)組長度是7

這里的gap初始值是7//2=3

a[i]初始值從3開始,a[3]=1。

接下來就是以gap的步長往前遍歷,把數(shù)組分為4組:

a[j-temp]  temp
7			1
2			6
9			4
1			6

然后進(jìn)行對(duì)比,如果a[j - gap] > temp,交換位置。

這樣處理后的數(shù)組為:

1247596

gap //= 2,gap=1。

a[i]初始值從1開始,a[1]=2。

接下來就是以gap的步長往前遍歷比大小:

a[j-temp]  temp
1			2
# 1247596
--------------
2			4
1			4
# 1247596
--------------
4			7
2			7
1			7
# 1247596
--------------
7			5
# 5,7互換
4			5
2			5
1			5
# 1245796
--------------
7			9
5			9
4			9
2			9
1			9
# 1245796
--------------
9			6
# 6,9互換
7			6
# 6,7互換
5			6
4			6
2			6
1			6
# 1245679

然后進(jìn)行對(duì)比,如果a[j - gap] > temp,交換位置。

這樣處理后的數(shù)組為:

1245679
def shell_sort(a):n = len(a)gap = n // 2while gap > 0:for i in range(gap, n):temp = a[i]j = iwhile j >= gap and a[j - gap] > temp:a[j] = a[j - gap]j -= gapa[j] = tempgap //= 2

希爾排序(Shell Sort)比插入排序(Insertion Sort)更高效的原因是因?yàn)橄柵判蛲ㄟ^使用間隔序列在排序過程中引入了數(shù)據(jù)交換的“跳躍”。這種跳躍允許算法在內(nèi)部循環(huán)中進(jìn)行更遠(yuǎn)距離的交換,從而減少了元素比較和移動(dòng)的次數(shù)。

對(duì)比代碼如下:

import random
import timedef insertion_sort(arr):comparisons = 0moves = 0for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:comparisons += 1arr[j + 1] = arr[j]moves += 1j -= 1comparisons += 1arr[j + 1] = keyreturn comparisons, movesdef shell_sort(arr):comparisons = 0moves = 0gap = len(arr) // 2while gap > 0:for i in range(gap, len(arr)):temp = arr[i]j = iwhile j >= gap and arr[j - gap] > temp:comparisons += 1arr[j] = arr[j - gap]moves += 1j -= gapcomparisons += j >= gaparr[j] = tempgap //= 2return comparisons, moves# 生成隨機(jī)數(shù)組
array_size = 1000
random_array = [random.randint(1, 10000) for _ in range(array_size)]# 復(fù)制數(shù)組以保持原始數(shù)組不變
insertion_array = random_array.copy()
shell_array = random_array.copy()# 插入排序
start_time = time.time()
insertion_comparisons, insertion_moves = insertion_sort(insertion_array)
insertion_time = time.time() - start_time# 希爾排序
start_time = time.time()
shell_comparisons, shell_moves = shell_sort(shell_array)
shell_time = time.time() - start_timeprint(f"Insertion Sort: Comparisons={insertion_comparisons}, Moves={insertion_moves}, Time={insertion_time:.6f}s")
print(f"Shell Sort: Comparisons={shell_comparisons}, Moves={shell_moves}, Time={shell_time:.6f}s")
Insertion Sort: Comparisons=245538, Moves=244539, Time=0.035560s
Shell Sort: Comparisons=14866, Moves=7356, Time=0.000997s
http://www.risenshineclean.com/news/41965.html

相關(guān)文章:

  • 青建集團(tuán)股份有限公司sem推廣優(yōu)化
  • 搭建什么網(wǎng)站好玩唐山百度seo公司
  • wordpress和laravel鄭州seo關(guān)鍵詞
  • 做良心網(wǎng)站seo的優(yōu)化步驟
  • 企業(yè)網(wǎng)站管理seo1視頻發(fā)布會(huì)
  • 怎么樣做國際網(wǎng)站生意seo知識(shí)培訓(xùn)
  • 鄭州旅游網(wǎng)站設(shè)計(jì)小學(xué)生一分鐘新聞播報(bào)
  • 企業(yè)管理培訓(xùn)課程課件南寧seo外包服務(wù)
  • 網(wǎng)站開發(fā)到發(fā)布佛山優(yōu)化推廣
  • 微信做模板下載網(wǎng)站有哪些企業(yè)網(wǎng)站制作流程
  • 效果圖網(wǎng)站模板南寧網(wǎng)站seo外包
  • 集美網(wǎng)站開發(fā)重慶企業(yè)免費(fèi)建站
  • 網(wǎng)站建設(shè)公司做銷售好不好哪個(gè)公司的網(wǎng)站制作
  • 洛陽網(wǎng)站建設(shè)好做不怎么安裝百度
  • 安徽省做網(wǎng)站武漢百度推廣代運(yùn)營
  • 如何給自己的公司網(wǎng)站做優(yōu)化百度關(guān)鍵詞怎么做排名
  • 做百度移動(dòng)網(wǎng)站優(yōu)網(wǎng)站日常維護(hù)有哪些
  • 怎么區(qū)分模板網(wǎng)站和定制網(wǎng)站網(wǎng)絡(luò)推廣都有什么方式
  • 什么網(wǎng)站做招聘效果好銷售找客戶的app
  • 泰州企業(yè)建站系統(tǒng)下列哪些店鋪適合交換友情鏈接
  • 洛陽市河陽建設(shè)工程有限公司網(wǎng)站站長之家查詢網(wǎng)
  • 上海網(wǎng)絡(luò)推廣公司外包合肥seo排名扣費(fèi)
  • 廣州網(wǎng)站建設(shè)建設(shè)南寧seo網(wǎng)絡(luò)推廣
  • 讓做網(wǎng)站策劃沒經(jīng)驗(yàn)怎么辦成都私人網(wǎng)站建設(shè)
  • 怎么做直播室的網(wǎng)站百度應(yīng)用平臺(tái)
  • 哪家公司做企業(yè)網(wǎng)站百度pc網(wǎng)頁版入口
  • 怎建立自己網(wǎng)站做淘寶客軟文寫作的十大技巧
  • 杭州網(wǎng)站制作報(bào)價(jià)谷歌優(yōu)化培訓(xùn)
  • 寶塔面板怎么搭建網(wǎng)站關(guān)鍵詞優(yōu)化方法有什么步驟
  • 濟(jì)南做網(wǎng)站哪家便宜西安百度公司地址介紹