冒泡 插入 選擇 歸併排序

2021-09-03 09:08:08 字數 1655 閱讀 2779

演算法原理:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數

所以,氣泡排序最好的時間複雜度為

若初始檔案是反序的,需要進行

氣泡排序的最壞時間複雜度為

綜上,因此氣泡排序總的平均時間複雜度為

**實現:

void swap(int &num1, int &num2)

//氣泡排序:公升序

void bubblesort(std::vector&nums)

}

演算法原理:⒈ 從第乙個元素開始,該元素可以認為已經被排序。

⒉ 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄。

⒊ 如果該元素(已排序)大於新元素,將該元素移到下一位置。

⒋ 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置。

⒌ 將新元素插入到下一位置中。

⒍ 重複步驟2~5。

時間複雜度最好為

**實現:

void swap(int &num1, int &num2)

//插入排序:公升序

void insertsort(std::vector&nums)

}

演算法原理:每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,直到全部記錄排序完畢。也就是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。

時間複雜度最好為

**實現:

void swap(int &num1, int &num2)

//選擇排序:公升序

void selectsort(std::vector&nums)

} swap(nums[i], nums[minindex]);

}}

演算法原理:歸併排序可以看這個部落格講的不錯:

時間複雜度最好為o(nlogn),最壞為o(nlogn),空間複雜度為o(n)。

**實現:

//歸併排序-公升序

void mergesort(std::vector&nums, int left, int right)

}void merge(std::vector&nums, int left, int mid, int right)

while (i <= mid)

while (j <= right)

cnt = 0;

//將temp中的元素全部拷貝到原陣列中

while (left <= right)

}

額外知識點:(1)小和問題     

(2)逆序對問題

排序 冒泡 插入 選擇 快速 歸併

public class sorttest bubblesort array insertsort array selectsort array quicksort array mergesort array for int i 0 i array.length i 氣泡排序 param array...

冒泡,插入,選擇排序

經典的排序演算法,此文章介紹三個 氣泡排序 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。public void bubblesort int a while iswrap for int ...

排序演算法 插入 選擇 冒泡 快排 歸併

可以找一些帖子理解下幾類排序演算法或者聽下陳越姥姥在mooc上的資料結構 選擇類排序 交換類排序 歸併排序 基數排序 拓撲排序 從待排序的n個記錄中的第二個記錄開始,依次與前面的記錄比較並尋找插入的位置,每次外迴圈結束後,將當前的數插入到合適的位置。void sort insert int a,in...