資料結構與演算法中常用的排序方法

2021-08-26 20:33:51 字數 1276 閱讀 4389

選擇出陣列中的最小元素,將它與陣列的第乙個元素交換位置。再從剩下的元素中選擇出最小的元素,將它與陣列的第二個元素交換位置。不斷進行這樣的操作,直到將整個陣列排序。把0索引的元素,和索引1以後的元素都進行比較,第一次完畢,最小值出現在了0索引。同理,其他的元素就可以排好。

public static void selectsort(int arr) }}

// 改進版插入排序(減少了陣列元素的操作次數)public static void better_sort(int arr)

arr[j] = e;}}

private static void swap(int arr, int i, int j)

演算法分析

插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

通過從左到右不斷交換相鄰逆序的相鄰元素,在一輪的交換之後,可以讓未排序的元素上浮到右側。

在一輪迴圈中,如果沒有發生交換,就說明陣列已經是有序的,此時可以直接退出。即相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處。同理,其他的元素就可以排好。

private static void sort(int arr)

}return;}}

private static void swap(int arr, int i, int j)

2023年shell發明,第乙個突破o(n2)的排序演算法,是簡單插入排序的改進版。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。希爾排序又叫縮小增量排序

演算法描述

先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,具體演算法描述:

**實現

// 希爾排序public static void sort(int arr)

arr[j] = e;}}

}// 希爾排序2public static void sort2(int arr)

h /= 3;}}

演算法分析

對於大規模的陣列,插入排序很慢,因為它只能交換相鄰的元素,每次只能將逆序數量減少 1。

希爾排序的出現就是為了改進插入排序的這種侷限性,它通過交換不相鄰的元素,每次可以將逆序數量減少大於 1。

希爾排序使用插入排序對間隔 h 的序列進行排序。通過不斷減小 h,最後令 h=1,就可以使得整個陣列是有序的。

資料結構 資料結構中常用的排序演算法

排序是資料結構中重要的內容,也是面試過程中經常涉及的部分。在這裡,我給出幾個基本的排序演算法的c c 對於具體的排序的原理,不做太多的介紹,隨便找一本資料結構教材都能弄清楚。宣告 1 以下給出的 並沒有判斷邊界條件,只是給出了演算法的核心 如果遇到具體的問題,應該加以判斷。2 演算法實現的是公升序排...

資料結構中常用演算法

排序常用的演算法有 插入演算法 直接插入演算法 折半插入演算法 希爾演算法 選擇演算法 簡單選擇演算法 堆排序演算法 快速演算法 氣泡排序 快速排序演算法 以下程式給出了各種演算法的實現,其介面為void sort int array,int len 每個檔案實現乙個演算法,最後和main.c檔案編...

資料結構與演算法 四 常用排序演算法

最近想總結一下常用的幾種排序演算法,恰好看到一系列總結的很好的部落格,感覺博主做的很用心,分享一下。排序演算法 一 之3種簡單排序 選擇,冒泡,直接插入 排序演算法 二 之希爾排序 排序演算法 三 之堆排序 排序演算法 四 之歸併排序 排序演算法 五 之快速排序 附上我自己的 實現 c 選擇排序 氣...