標籤:out ... long public blog java物件導向 nbsp 總結 col
這三種排序有倆個過程:
1.比較倆個資料。
2.交換倆個資料或複製其中一項。
這三種排序的時間層級
冒泡排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2
交換 0——N2/2 = N2/4
總時間 3/4*N2
選擇排序:比較 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2
交換 0——3*(N-1)=3*(N-1)/2=3/2*N
總時間 N2/2+3/2*N
插入排序:第一輪最多比較一次,第二輪最多比較倆次,最後一輪比較N-1次,所以最多比較N*(N-1)/2。
複製的次數和比較的次數大致相等,但是複製消耗的時間比交換要小.
比較 0——N*(N-1)/2=N*(N-1)/4=N2/4
複製 0——N*(N-1)/2=N*(N-1)/4=N2/4
總時間 N2//2
總結:插入排序演算法比冒泡快一倍,比選擇排序略快一點,但這些演算法都是O(N2)的時間層級。
這三種排序的思想
冒泡排序:在首輪,第一項和第二項比較,將大的放在後面,然後比較第二項和第三項,將大的放在後面,以此類推在首輪結束,最大的資料已經在最後一項了。在一輪輪的比較中,後面的已經排好的資料項目越來越多,需要排序的資料項目越來越少,直到為零。
選擇排序:在冒泡排序上做了最佳化,減少了交換次數,在首輪選擇最小的數放在第一項,一輪之後第一項是有序的了,第二輪從第二項開始選擇最小的數放在第二項,以此類推,直到整個數組完全有序。
插入排序:和前倆種排序不同,插入排序在排序過程中是局部有序,隨著插入項的增多,有序部分的項的位置會發生改變,而冒泡排序和選擇排序每輪確定的項數的位置是永遠不變的。在首輪,選擇第二項作為插入項,然後取出這一項放在一個變數中,和前一項比較而且小,則前一項後移到第二項的位置,然後第二項也就是插入項放在前一項的位置,第二輪選擇第三項作為插入項然後取出和前一項也就是第二項比較如果小,第二項後移到插入項,然後插入相在和第一項比較如果小,則第一項後移到第二項,插入項放在第一項,以此類推。
這三種排序的java程式
1.冒泡排序
package aa;class BubbleSort{ private long[] a; private int nElems; public BubbleSort(int max){ a = new long[max]; nElems = 0; } public void insert(long value){ a[nElems] = value; nElems ++; } public void display(){ for(int i = 0; i < nElems; i++) { System.out.println(a[i] + " "); } System.out.println(""); } public void bubbleSort(){ for(int i = 0; i < nElems - 1; i++) { for(int j = 0; j < nElems - 1 - i; j++) { if(a[j] > a[j + 1]) { long temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } }}public class BubbleSortApp { public static void main(String[] args){ BubbleSort arr = new BubbleSort(100); arr.insert(77); arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); arr.bubbleSort(); arr.display(); } }
2.選擇排序
package aa;class SelectSort{private long[] a;private int nElems;public SelectSort(int max){a = new long[max];nElems = 0;}public void insert(long value){a[nElems] = value;nElems ++;}public void display(){for(int i = 0; i < nElems; i++){System.out.println(a[i] + " ");}System.out.println("");}public void SelectionSort(){for(int i = 0; i < nElems - 1; i++){int min = i;for(int j = i + 1; j < nElems; j++){if(a[j] < a[min]){long temp = a[j];a[j] = a[min];a[min] = temp;}}}}}public class SelectSortApp {public static void main(String[] args){SelectSort arr = new SelectSort(100);arr.insert(77);arr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);arr.insert(00);arr.insert(66);arr.insert(33);arr.display();arr.SelectionSort();arr.display();}}
3.插入排序
package aa;class InsertSort{private long[] a;private int nElems;public InsertSort(int max){a = new long[max];nElems = 0;}public void insert(long value){a[nElems] = value;nElems ++;}public void display(){for(int j = 0; j < nElems; j++){System.out.println(a[j] + " ");}System.out.println("");}public void insertionSort(){int out,in;for(out = 1; out < nElems; out++){long temp = a[out];in = out;while(in > 0 && a[in-1] >= temp){a[in] = a[in - 1];in --;}a[in] = temp;}}}public class InsertSortApp {public static void main(String[] args){int maxSize = 100;InsertSort arr = new InsertSort(maxSize);arr.insert(77);arr.insert(99);arr.insert(44);arr.insert(55);arr.insert(22);arr.insert(88);arr.insert(11);arr.insert(00);arr.insert(77);arr.insert(77);
arr.display();arr.insertionSort();arr.display();}}
java物件導向的冒泡排序,選擇排序和插入排序的比較