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 思路 將第乙個元素與剩餘所有元素相比,如果有比第...