選擇排序:
它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。
演算法原理
1.首先從原始資料中選擇選擇最小的1個資料,將其和位於第1個位置的資料交換
2.接著從剩下的n-1個資料中選擇次小的乙個元素,將其和第2個位置的資料交換
3.不斷重複,直到最後兩個資料完成交換.
}//交換兩個數
if(index!=i)
system.out.print("第"+i+"步排序結果:"); //輸出每步排序的結果
for(int h=0;hout.print(" "+a[h]); //輸出
}system.out.print("\n");}}
public
static
void
main(string args)
system.out.print("排序前的陣列為:\n"); //輸出排序前的陣列
for(i=0;iout.print(shuzu[i]+" ");
}system.out.print("\n");
selectsort(shuzu); //排序操作
system.out.print("排序後的陣列為:\n");
for(i=0;iout.print(shuzu[i]+" "); //輸出排序後的陣列
}system.out.print("\n");}}
時間複雜度選擇排序的交換操作介於 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介於 0 和 3 (n - 1) 次之間。
比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+…+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。
穩定性
選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法。
排序演算法 選擇排序原理及Java實現
選擇排序是一種簡單直觀的排序演算法,其基本原理如下 對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第乙個記錄的位置交換 接著對不包括第乙個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換 重複該過程,知道進行比較的記錄只剩下乙個為止。從簡單選擇排序的過程...
插入排序原理分析及Java實現
插入排序 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o ...
希爾(shell)排序原理分析及Java實現
shell排序 先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序 然後,取第二個增量d2 public class demo system.out.print n public static void main...