冒泡排序(BubbleSort)
冒泡排序的時間複雜度爲O(n^2)。
1.比較相鄰的元素,前一個比後一個大(或者前一個比後一個小)調換位置
2.每一對相鄰的元素進行重複的工作,從開始對一直到結尾對,這步完成後,結尾爲最大或最小的數.
3.針對除了最後一個元素重複進行上面的步驟。
4.重複1-3步驟直到完成排序
動畫演示:
實現代碼:
package Array;
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
bubblesort();//調用方法
}
public static void bubblesort(){
int arr[] = {5,3,2,9,1,7,8,6,4};
//i表示輪數
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){ //後者大於前者
int temp = arr[j];
arr[j] = arr[j+1]; //將arr[j+1]和arr[j]的位置互換
arr[j+1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) { //遍歷排序後的數組
System.out.print(arr[i]+" ");
}
}
}
選擇排序(Selection Sort)
以升序爲例,第一趟,將數組中下標爲0的元素和下標爲1的元素進行比較,如果後面的元素比它小,則將下標爲1的元素和下標爲0的元素位置互換,然後再拿下標爲0的元素和下標爲2的元素進行比較.....下標爲0的元素和所有元素排序完畢,再拿下標爲2,3,4,......的元素按照上面流程繼續進行排序。
動畫演示:
實現代碼:
package day05Array;
//選擇排序 以升序排列
public class SelectedSort {
public static void main(String[] args) {
selectsort(); //調用方法
}
public static void selectsort(){
int arr[]={5,3,2,9,1,7,8,6,4}; //定義數組
for (int i = 0; i < arr.length-1; i++) {
for(int j =i+1;j<arr.length;j++){
if(arr[i]>arr[j]){ //後面的元素大於前一個元素
//進行位置互換
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) { //遍歷排序好的數組
System.out.print(arr[i]+" ");
}
}
}
插入排序(Insertion-Sort)
它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。
算法描述
動畫演示:
- 從第一個元素開始,該元素可以認爲已經被排序;
- 取出下一個元素,在已經排序的元素序列中從後向前掃描;
- 如果該元素(已排序)大於新元素,將該元素移到下一位置;
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
- 將新元素插入到該位置後;
- 重複步驟2~5。
實現代碼:
package day05Array;
//插入排序
public class InsertSort {
public static void main(String[] args) {
insertSort();
}
public static void insertSort(){
int[] arr={5,1,3,2,7,4,9,8,6};
for(int i=1;i<arr.length;i++){
int e=arr[i];
int j=i-1;
while(j>=0&&arr[j]>e){
arr[j+1]=arr[j];
j--;
}
arr[j+1]=e;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}