資料結構和演算法學習(3) 簡單排序

2021-07-05 11:52:56 字數 1777 閱讀 1134

本次學習主要內容:氣泡排序、選擇排序、插入排序

1.比較兩個資料項

2.交換兩個資料項或者複製其中一項

1.從第二項開始,依次與前一項進行比較

2.前一項大於後一項則交換位置,否則無動作

3.向右移動,進行下一次比較

4.比較至最後一項後從步驟1開始重複,直到整個陣列有序

因為最大的資料項總是「冒泡」到陣列的頂端,故稱「氣泡排序」

int sort=new int[100];

random r = new random();

int temp=0;

for (int i = 0; i < sort.length; i++)

for (int i = sort.length; i > 0; i--) else }}

for (int i : sort)

由於每一次都會將當前最大的數字排至隊尾,所以內層迴圈應當迴圈(陣列長度-外層迴圈次數)次

陣列長度為n,則進行n次排序,第i次排序比較了n-i次

也就是做了n^2/2次比較

也就是時間複雜度為

o(n^2)

1.找到當前資料中最小值

2.與當前資料中下標最小值交換

3.重複步驟1開始,直到整個陣列有序

int sort = new int[100];

random r = new random();

int temp = 0;

int sign = 0;

for (int i = 0; i < sort.length; i++)

for (int i = 0; i < sort.length; i++)

} temp = sort[i];

sort[i] = min;

sort[sign] = temp;

}for (int i : sort)

根據比較次數來講,與冒泡交換無異,但是交換次數要少的多,少於陣列長度,雖然時間複雜度為

o(n^2)

但是無疑要比氣泡排序要快,當n值較小時,特別的交換時間級比比較時間級大得多的時候,選擇排序是相當快的

1.選取乙個標誌,要求標誌左端有序

2.從標誌起,將右側資料依次向左側的有序陣列中插入

3.從步驟1開始重複,直到整個陣列有序

int sort = new int[100];

random r = new random();

int temp = 0;

for (int i = 0; i < sort.length; i++)

for (int i = 1; i < sort.length; i++)

sort[j] = temp; }}

for (int i : sort)

在第一次排序中最多比較一次,第二次排序中最多比較兩次,依次類推,最後一次比較n-1次。故最多比較n*(n-1)/2次

然而在每次次排序發現插入點之前平均只有一般的資料參與了比較,也就是約比較n*(n-1)/4次

複製次數大致等於比較次數,故對於隨機資料而言,比氣泡排序快一倍,比選擇排序略快

然而對於已經有序或者基本有序的資料而言,插入排序要好得多,由於while條件多數為假,故此之變成了外層迴圈的乙個簡單語句

所以有序情況:o(n)

無序情況:o(n^2)

資料結構與演算法 3 簡單排序

氣泡排序的api設計 class bubble 兩個數之間換位置 private static void exch comparable a,int i,int j 適用於輸入規模比較少的時候 選擇排序的api設計 public class testselection selection.sort ...

java資料結構和演算法 第3章 簡單排序

氣泡排序 選擇排序 插入排序 public class sortdemo bubblesort a system.out.println int b selectsrot b system.out.println int c insertsort c 氣泡排序 public static void ...

資料結構 簡單排序

1 氣泡排序 package chap02 public class bubblesort 測試類 package chap02 public class testsort system.out.println 排序前 system.out.print for int i 0 i arr.lengt...