日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法与数据结构(冒泡排序,选择排序和插入排序的总结)

發布時間:2025/3/21 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法与数据结构(冒泡排序,选择排序和插入排序的总结) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序,選擇排序和插入排序的總結


在規模較小時,或者元素的有序性較高時,插入排序的時間復雜度可以接近 O(n) ,是上述三種排序里表現最好的


一、通過表格我們可以發現,冒泡排序的時間復雜度是要優于選擇排序的,但實際上選擇排序的平均效率要優于冒泡排序

冒泡排序的思想是不斷比較相鄰元素大小,如果逆序,就需要不斷的交換位置,也就是說在冒泡排序的一次子循環中,可能需要進行多次交換操作

選擇排序的思想是在未排序序列中找出最小值,添加到有序序列末端,并不斷重復。這種排序方式導致選擇排序無論如何都會進行n(n?1)2\frac{n(n-1)}{2}2n(n?1)? 次比較操作,但是在交換位置時,選擇排序只需要進行一步操作

也就是說,對于非優化的冒泡排序和選擇排序,他們都需要進行 nnn 次子循環。而在每一次子循環中,冒泡排序需要 nnn 次比較和多次數據交換,選擇排序需要 nnn 次比較和一次數據交換

所以選擇排序的實際效率一般會略高于冒泡排序


二、從字面上來看,冒泡排序和插入排序的時間復雜度是一樣的,但是插入排序的效率高于冒泡排序

要回答這個問題,首先要了解有序度

有序度是列表中有序元素對的個數,用數學關系表示就是

a[i]≤a[j],ifi<ja[i] \leq a[j], if \quad i < j a[i]a[j],ifi<j
例如,對于[2, 4, 3, 1, 5, 6]這個數組來說,有序元素對個數是 11,分別是:

(2,4)(2,3)(2,5)(2,6)

(4,5)(4,6)

(3,5)(3,6)

(1,5)(1,6)

(5,6)

對于一個倒序數組來說,有序度是 0; 對于一個完全有序數組來說,有序度是 \frac{n(n-1)}{2},在這里就是 15

逆序度的定義和有序度正好相反,因此我們可以得到一個公式

逆序度=滿有序度?有序度逆序度 = 滿有序度 - 有序度=滿?

我們排序的過程就是一個增加有序的,減少逆序度的過程,最后達到滿有序度,就說明排序完成了

對于冒泡排序來說,每交換一次,有序度+1, 因此總交換次數等于逆序度。對于包含 nnn 個數據的冒泡排序來說,最好的情況是逆序度為0,即不需要交換;最壞的情況是逆序度為 n(n?1)2\frac{n(n-1)}{2}2n(n?1)?。換句話說,平均情況下,冒泡排序需要 n(n?1)4\frac{n(n-1)}{4}4n(n?1)? 次交換操作

對于插入排序來說,每一次操作中后移元素的個數之和就等于逆序度,見下圖:

逆序度 = 10 = 3 + 3 + 4

再來回答問題,我們之前提到比較排序算法的時間復雜度有兩個因素:比較次數和交換次數

非優化的冒泡排序的比較次數一定是大于插入排序的,優化過后兩者比較次數不太好比較,但最大值都是 n(n?1)2\frac{n(n-1)}{2}2n(n?1)?

因為冒泡排序的交換次數等于逆序度,插入排序的元素移動次數(這里的元素后移其實也是靠交換賦值來實現的,但是形象上看更像是將元素向后移動了,也便于和冒泡排序區分,所以表述成移動次數)也等于逆序度。但是,從代碼實現來看,冒泡排序的交換操作要比插入排序的移動復雜

冒泡排序每交換一次,需要給三個變量賦值

int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp;

而插入排序只需要一次,且插入排序的臨時變量只會在每一輪子循環中交換一次值

arr[pos+1] = arr[pos];

因此,插入排序的實際效率是比冒泡排序要高的


相關章節
第一節 簡述
第二節 稀疏數組 Sparse Array
第三節 隊列 Queue
第四節 單鏈表 Single Linked List
第五節 雙向鏈表 Double Linked List
第六節 單向環形鏈表 Circular Linked List
第七節 棧 Stack
第八節 遞歸 Recursion
第九節 時間復雜度 Time Complexity
第十節 排序算法 Sort Algorithm
第十一節 冒泡排序 Bubble Sort
第十二節 選擇排序 Select Sort
第十三節 插入排序 Insertion Sort
第十四節 冒泡排序,選擇排序和插入排序的總結
第十五節 希爾排序 Shell’s Sort
第十六節 快速排序 Quick Sort
第十七節 歸并排序 Merge Sort

總結

以上是生活随笔為你收集整理的算法与数据结构(冒泡排序,选择排序和插入排序的总结)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。