排序演算法(四)

2022-03-31 01:37:25 字數 1213 閱讀 4932

基本思想:

在要排序的一組數中,選出最小(或者最大)的第乙個數與第乙個位置的數交換;然後在剩下的數當中在找最小(或者最大)與第二個位置的數交換,以次類推,直到n-1個元素(倒數第二個數)和第n個元素(最後乙個數)比較位置比較為止。

簡單選擇排序的示例:

操作方法:

1、第一趟,從n個記錄中找出關鍵碼最小的的記錄與第乙個記錄交換。

2、第二趟,從第二個記錄開始的n-1個記錄中找出關鍵碼最小的記錄與第二個記錄交換。

以此類推....

3、第i趟,則從第n-i+1個記錄中找出關鍵碼最小的記錄與第i個記錄交換,直到整個序列按關鍵碼有序。

演算法實現:

public

class

selectionsort2 ;

sort(a, a.length);

for(int i=0; i)

}public

static

void sort(int a,int

n) }

if(key !=i)}}

}

簡單選擇排序的改進----二元選擇排序

簡單選擇排序,每趟迴圈只確定乙個元素排序後的定位。我們可以考慮改進每趟迴圈確定倆個元素(當前趟最大和最小記錄)的位置,從而減少迴圈的次數。改進後對n個資料進行排序,只需要(n/2)趟循即可,下面是演算法的實現:

public

class

selectionsort3 ;

sort(a, a.length);

for(int i=0; i)

}public

static

void sort(int a, int

n)

if(a[min]>a[j])

}temp = a[i-1];

a[i-1] =a[min];

a[min] =temp;

temp = a[n-i];

a[n-i] =a[max];

a[max] =temp;}}

}

排序演算法(四) Shell排序

排序思路 該演算法是直接插入排序的優化演算法。採用粗略排序到精確排序的思路,首先粗略的,按照步長step len 2,選取元素 相距step遠為一組 執行直接排序演算法,此時元素都是兩兩為一組。排序好後,在將步長放短,step step 2。依次類推。這樣的好處在於,每次執行直接插入排序時,排序複雜...

排序演算法(四)選擇排序

基本思想 每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。回顧和簡介 在介紹選擇排序演算法前,我們再回顧下冒泡演算法。冒泡演算法是通過兩兩比較,不斷交換,逐個推進的方式,來進行排序的。一次遍歷,得到乙個最值。冒泡演算法最費時的是什麼?一是兩兩比較 一...

排序演算法 四 希爾排序

希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...