排序演算法之選擇排序

2021-08-28 02:47:05 字數 1205 閱讀 3771

a)原理:每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,直到全部記錄排序完畢。也就是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的演算法主要有簡單選擇排序、樹型選擇排序和堆排序。(這裡只介紹常用的簡單選擇排序)

b) 簡單選擇排序的基本思想:給定陣列:int arr=;第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料,將它與arrr[1]交換;第2趟,在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換;以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料,將它與r[i]交換,直到全部排序完成。

c) 舉例:陣列 int arr=;

第一趟排序: 原始資料:5  2  8  4  9  1

最小資料1,把1放在首位,也就是1和5互換位置,

排序結果:1  2  8  4  9  5

第二趟排序:

第1以外的資料進行比較,2最小,

排序結果:1  2  8  4  9  5

第三趟排序:

除1、2以外的資料進行比較,4最小,8和4交換

排序結果:1  2  4  8  9  5

第四趟排序:

除第1、2、4以外的其他資料進行比較,5最小,8和5交換

排序結果:1  2  4  5  9  8

第五趟排序:

除第1、2、4、5以外的其他資料進行比較,8最小,8和9交換

排序結果:1  2  4  5  8  9

注:每一趟排序獲得最小數的方法:for迴圈進行比較,定義乙個第三個變數temp,首先前兩個數比較,把較小的數放在temp中,然後用temp再去跟剩下的資料比較,如果出現比temp小的資料,就用它代替temp中原有的資料。具體參照後面的**示例,相信你在學排序之前已經學過for迴圈語句了,這樣的話,這裡理解起來就特別容易了。

public class selectionsort 

}if(k!=x)

} }public static void main(string args) ;

system.out.println("排序前" + arrays.tostring(arr));

selectionsort(arr);

system.out.println("排序後" + arrays.tostring(arr));

}}

w

排序演算法 排序演算法之選擇排序

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...

排序演算法之選擇排序

選擇排序 在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換.第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。平均時間複雜度 o n2 空間複雜度 o 1 用於...