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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构与算法 / 排序算法(1)

發布時間:2024/10/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法 / 排序算法(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

零、前言

1、常用的排序算法總結

排序算法種類時間復雜度是否基于比較
冒泡、插入、選擇O(n^2)
快排、歸并O(nlogn)
桶、計數、基數O(n)×

2、算法的內存消耗 - 原地排序

? ? ? ? 指的是空間復雜度是 O(1) 排序算法。

4、算法的穩定性

? ? ? ? 原來序列中相等的元素,經過排序之后,相等元素之間原有的先后順序不變。

一、冒泡排序

1、原地排序?

? ? ? ?屬于原地排序算法。冒泡排序僅僅數據交換用到了交換操作,只需常量級的臨時空間,空間復雜度為O(1)。

2、穩定性排序?

? ? ? 屬于穩定排序算法。為了實現穩定排序,只需要保證在比較時發現相等時不交換數據即可,故。

3、時間復雜度

(1)最好的情況

? ? ? ?待排序的數據已有序,則只需進行一次冒泡排序即可,時間復雜度為 O(1)

(2)最壞的情況

? ? ? ?待排序的數據是倒序,則需要 n 次冒泡排序,時間復雜度為 O(n^2) 。具體的計算公式看下面網址:https://blog.csdn.net/itworld123/article/details/90766948

(3)平均時間復雜度

? ? ? ?對于最好的情況,需要交換 0 次,針對最壞的情況,需要交換 n(n-1)/2,因為數據排布具有隨機性,故交換次數的平均值為 n(n-1)/4,時間復雜度依然為 O(n^2)

二、插入排序

1、原理

? ? ? ?將待排序的數列分成兩組,分別是已排序部分和未排序部分。排序的過程就是將未排序中的數據逐一與已排序的數據進行比較,將該數據插入到已排序的數列中。

2、原地排序?

? ? ? ?屬于原地排序算法。根據代碼,插入排序過程中不需要額外的空間,空間復雜度為 O(1) 。

3、穩定性排序?

? ? ? ?屬于穩定排序算法。為了實現穩定性排序,可以將后面數據插入到前面與之相同的數據的后面即可。

4、時間復雜度

(1)最好的情況

? ? ? ?待排序的數據已有序,每個元素進行一次比較即可,時間復雜度為 O(1)

(2)最壞的情況

? ? ? ?待排序的數據是倒序,則:

? ? ? ?? ? ? ?第 2 個數據和第 1 個數據比較,比較 1 次;

? ? ? ?? ? ? ?第 3 個數據和第1、2個數據比較,比較 2 次;

? ? ? ?? ? ? ?第 4 個數據和第1、2、3個數據比較,比較 3?次;

? ? ? ?? ? ? ?? ? ? ?? ? ? ?……? ? ? ?? ? ? ?……

? ? ? ?? ? ? ?第 n 個數據和第1、2、3、……、(n-1)?個數據比較,比較 (n-1) 次;

? ? ? ?比較次數和為 n(n-1)/2,時間復雜度為 O(n^2)

(3)平均時間復雜度

? ? ? ?由于數據排布具有隨機性,故平均時間復雜度為?O(n^2)

三、選擇排序

1、原理

? ? ? ?和插入排序類似,也是將數列分成了已排序部分和未排序部分,但是選擇排序算法是從未排序部分選擇最小值和當前數據進行交換。

2、原地排序?

? ? ? ?屬于原地排序算法。根據代碼,選擇排序過程中不需要額外的空間,空間復雜度為 O(1) 。

3、穩定性排序?

? ? ? ?不屬于穩定排序算法。因為存在大量的交換,容易導致在交換過程中相同的兩個數據前后位置發生變化。

? ? ? ?栗子:5、8、5、2、9

? ? ? ?? ? ? ?比較時,“5”和“2”會調換位置,那么兩個“5”的原來的位置就顛倒了。

4、時間復雜度

(1)最好的情況

? ? ? ?待排序的數據已有序,每個元素進行一次比較即可,時間復雜度為 O(1)

(2)最壞的情況

? ? ? ?待排序的數據是倒序,則:

? ? ? ?? ? ? ?第 1?個數據和第 2、3、……、n?個數據比較,比較 (n-1)?次;

? ? ? ?? ? ? ?第 2?個數據和第 3、4、……、n 個數據比較,比較 (n-2) 次;

? ? ? ?? ? ? ?第 3?個數據和第 4、5、……、n 個數據比較,比較 (n-3)?次;

? ? ? ?? ? ? ?? ? ? ?? ? ? ?……? ? ? ?? ? ? ?……

? ? ? ?? ? ? ?第 (n-1) 個數據和第 n?個數據比較,比較 1?次;

? ? ? ?比較次數和為 n(n-1)/2,時間復雜度為 O(n^2)

(3)平均時間復雜度

? ? ? ?由于數據排布具有隨機性,故平均時間復雜度為?O(n^2)

四、插入比冒泡更受歡迎的原因

? ? ? ?因為冒泡排序中每次交換需要 3 條賦值語句,而插入排序則僅僅需要1次。

#define SWAP(x, y) \do \{ \(x) ^= (y); \(y) ^= (x); \(x) ^= (y); \} while (false)

五、總結

1、性質

算法種類時間復雜度空間復雜度原地排序穩定排序
冒泡排序O(n^2)O(1)
插入排序O(n^2)O(1)
選擇排序O(n^2)O(1)×

2、源代碼

Github

?

(SAW:Game Over!)

總結

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

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