排序演算法 二 冒泡 選擇 插入排序

2021-10-02 23:35:15 字數 4458 閱讀 6213

1.1 基本介紹

氣泡排序(bubble sorting)的基本思想是:通過對待排序序列從前向後(從下標較小的元素開始),依次比較相鄰元素的值,若發現逆序則交換,使值較大的元素逐漸從前移向後部,就象水底下的氣泡一樣逐漸向上冒。

優化:因為排序的過程中,各元素不斷接近自己的位置,如果一趟比較下來沒有進行過交換,就說明序列有序,因此要在排序過程中設定乙個標誌 flag 判斷元素是否進行過交換。從而減少不必要的比較。(這裡說的優化,可以在氣泡排序寫好後,在進行)

1.2 演示冒泡過程的例子(**)

小結氣泡排序規則

(1) 一共進行 陣列的大小-1 次 大的迴圈

(2)每一趟排序的次數在逐漸的減少

(3) 如果我們發現在某趟排序中,沒有發生一次交換, 可以提前結束氣泡排序(這個就是優化)

1.3 氣泡排序**實現

public static void bubblesort(int arr) 

}// system.out.println("第" + (i + 1) + "趟排序後的陣列");

// system.out.println(arrays.tostring(arr));

if (!flag) else

} }

1.3 氣泡排序效能分析
氣泡排序的時間複雜度為o(n^2),為了測試氣泡排序的速度,我們給定80000個資料測試。

public static void main(string args) ;

// system.out.println("排序前的陣列為:");

// system.out.println(arrays.tostring(arr));

//測試一下氣泡排序的速度o(n^2),給80000個資料測試

//建立要給80000個隨機的陣列

int arr = new int[8];

for(int i = 0 ; i < 8; i++)

date date1 = new date();

******dateformat ******dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss");

string date1str = ******dateformat.format(date1);

system.out.println("排序前的時間是:"+date1str);

bubblesort(arr);

// system.out.println("排序後的陣列為:");

// system.out.println(arrays.tostring(arr));

date date2 = new date();

string date2str = ******dateformat.format(date2);

system.out.println("排序後的時間是:"+date2str);

}

執行結果如下:可以看出80000條資料的測試結果為10s左右

2.1 基本介紹

選擇式排序也屬於內部排序法,是從欲排序的資料中,按指定的規則選出某一元素,再依規定交換位置後達到排序的目的。

2.2 選擇排序思想:

選擇排序(select sorting)也是一種簡單的排序方法。它的基本思想是:第一次從 arr[0]~arr[n-1]中選取最小值, 與 arr[0]交換,第二次從 arr[1]~arr[n-1]中選取最小值,與 arr[1]交換,第三次從 arr[2]~arr[n-1]中選取最小值,與 arr[2] 交換,…,第 i 次從 arr[i-1]~arr[n-1]中選取最小值,與 arr[i-1]交換,…, 第 n-1 次從 arr[n-2]~arr[n-1]中選取最小值, 與 arr[n-2]交換,總共通過 n-1 次,得到乙個按排序碼從小到大排列的有序序列。

2.3 演示選擇排序過程的例子(**)

2.4 選擇排序**實現

public static void selectsort(int arr) 

}if(minindex != i)

/* system.out.println("第"+(i+1)+"輪後~~");

system.out.println(arrays.tostring(arr));*/

}}

2.4 選擇排序效能分析
同樣選擇排序的時間複雜度為o(n^2),為了測試選擇排序的速度,我們給定80000個資料測試。

public static void main(string args) ;

int arr = new int[80000];

for(int i = 0 ; i < 80000; i++)

date date1 = new date();

******dateformat ******dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss");

string date1str = ******dateformat.format(date1);

system.out.println("排序前的時間是:"+date1str);

"排序前:");

arrays.tostring(arr));

selectsort(arr);

date date2 = new date();

string date2str = ******dateformat.format(date2);

system.out.println("排序後的時間是:"+date2str);

}

執行結果:從機器的測試結果來看,選擇排序要比氣泡排序快

3.1 插入排序法介紹:

插入式排序屬於內部排序法,是對於欲排序的元素以插入的方式找尋該元素的適當位置,以達到排序的目的。

3.2 插入排序法思想:

插入排序(insertion sorting)的基本思想是:把 n 個待排序的元素看成為乙個有序表和乙個無序表,開始時有序表中只包含乙個元素,無序表中包含有 n-1 個元素,排序過程中每次從無序表中取出第乙個元素,把它的排序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表。

3.3 插入排序的**:

3.4 插入排序的**實現

//插入排序

public static void insertsort(int arr)

// 當退出while迴圈時說明插入位置找到了,insertindex + 1

if (insertindex + 1 != i)

// system.out.println("第" + i + "輪插入");

// system.out.println(arrays.tostring(arr));

} }

3.5 插入排序的效能測試
同樣插入排序的時間複雜度為o(n^2),為了測試插入排序的速度,我們給定80000個資料測試。

public static void main(string args) ;

// 建立要給80000個隨機的陣列

int arr = new int[80000];

for (int i = 0; i < 80000; i++)

date date1 = new date();

******dateformat ******dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss");

string date1str = ******dateformat.format(date1);

system.out.println("排序前的時間是:" + date1str);

insertsort(arr);

date date2 = new date();

string date2str = ******dateformat.format(date2);

system.out.println("排序後的時間是:"+date2str);

}

排序演算法 冒泡 選擇 插入排序

本文簡單總結一下三大排序演算法,如有不足,請多多提意見。簡述 從小到大排序,每次比較兩個元素,看他們的順序有沒有錯,如果錯了就換過來。a 比較abc.元素,如果第乙個比第二個大,則將兩個元素交換位置 bac.再依次將a和c進行比較。b 對每一對相鄰的元素做同樣的工作,從第一對到最後一對。這一次執行完...

排序演算法 冒泡 選擇 插入排序

外層迴圈控制大排序次數,內層迴圈控制每次大排序的排序次數 一次大排序就可以把最小的資料放在最前面。1 對陣列中的各資料,依次比較相鄰的兩個元素的大小 2 如果前面的資料大於後面的資料,就交換著兩個資料。經過第一 排序後,便可把最小的資料排好。3 然後再用同樣的方法吧剩下的資料逐個比較,最後得到從小到...

《演算法》選擇排序 插入排序 氣泡排序

選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...