原理
每一趟從待排序的記錄中選出最小的元素,順序放在已排好序的序列最後,直到全部記錄排序完畢。也就是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的演算法主要有簡單選擇排序、樹型選擇排序和堆排序。(這裡只介紹常用的簡單選擇排序)
簡單選擇排序的基本思想
給定陣列:int arr=;第1趟排序,在待排序資料arr[1]~arr[n]中選出最小的資料,將它與arrr[1]交換;第2趟,在待排序資料arr[2]~arr[n]中選出最小的資料,將它與r[2]交換;以此類推,第i趟在待排序資料arr[i]~arr[n]中選出最小的資料,將它與r[i]交換,直到全部排序完成。
舉例陣列 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迴圈語句了,這樣的話,這裡理解起來就特別容易了。
package com.deem.ai.sort;
public
class selectionsort
}public
static
void
main(string args) ;
system.out.print("排序前。。。");
for (int i : b)
system.out.print(i + " ");
selectionsort(b);
system.out.print("排序後。。。");
for (int i : b)
system.out.print(i + " ");
}}
結果排序前*****====49 38 65 97 76 13 27 50
排序後*****====
13 27 38 49 50 65 76 97
經典排序演算法 選擇排序
對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面 後乙個元素 現變成了 前乙個元素 繼續跟他的 後乙個元素 進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置 下標 等到迴圈結束的時候,我們應該找到了最小的那個數的下標了...
經典排序演算法 選擇排序
選擇排序是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,放到排序序列末尾。以此類推,直到所有的元素均排序完畢。選擇排序的交換操作介於0和 n 1 次之間 選擇排序的比較操作為n n 1 2次之間 選擇...
經典排序演算法 選擇排序
含義 直接從待排序陣列裡選擇乙個最小 或最大 的數字,每次都拿乙個最小數字出來,順序放入新陣列,直到全部拿完。特點 以從小到大排序為例 n個元素,每一趟比較找出最小的那個元素,放在頭部 經過n 1趟比較,排序就出來了。相當於每次從無序列表裡找出乙個最小數,放到左邊 然後剩下的元素繼續找出最小的,放在...