1.冒泡演算法
平均時間複雜度為o(n²);
從小到大排序:
形式1(把大數往右對齊,即右大對齊策略):
public class bubblesort ;
int temp=0;
for(int i=0;ia[j+1])
} }
for(int i=0;i形式2:(把小數往左對齊,即左小對齊策略)
public class bubble_sort }}
}public static void main(string args)
;bubble_sort(x);
system.out.println(arrays.tostring(x));
}}
2.快速排序:
時間複雜度為o(nlogn)
public static void quicksort(int arr, int startindex, int endindex) else }}
//確定target的排序後,如果target左邊還有元素,繼續遞迴排序
if((start-1)>startindex)
//確定target的排序後,如果target右邊還有元素,繼續遞迴排序
if((end+1)參考:
3.歸併排序
時間複雜度是o(nlogn)
public class mergesort ;
sort(arr);
system.out.println(arrays.tostring(arr));
}public static void sort(int arr)
private static void sort(int arr,int left,int right,int temp);
sort(arr);
system.out.println(arrays.tostring(arr));
}public static void sort(int arr)
//2.調整堆結構+交換堆頂元素與末尾元素
for(int j=arr.length-1;j>0;j--)
}/**
* 調整大頂堆(僅是調整過程,建立在大頂堆已構建的基礎上)
* @param arr
* @param i
* @param length
*/public static void adjustheap(int arr,int i,int length)else
}arr[i] = temp;//將temp值放到最終的位置
}/**
* 交換元素
* @param arr
* @param a
* @param b
*/public static void swap(int arr,int a ,int b)
}
參考:
5.插入排序
public static void insertionsort(int nums)
for(int i = 1; i < nums.length; i++)
}}public static void swap(int arr, int i, int j)
上面的演算法的缺點:在第i-1趟插入時,需要把第i個元素插入到前面的i-1個元素中,該演算法總是從i-1個元素開始逐個比較之前的每個元素,直到找到第i個元素的插入位置,這顯然沒有利用前面0~i-1個元素已經有序的特點
優化:在0~i-1個有序元素給第i個元素尋找插入的位置時,使用二分查詢法可以有效提高查詢插入位置的時間效率,經過優化的插入排序稱為折半插入排序,折半插入排序的時間複雜度為o(n*logn)
/**
* 折半插入排序
*/public static void binaryinsertionsort(int nums)
for(int i = 1; i < nums.length; i++)
// 更新插入位置的值
nums[insertindex] = temp;
}}/**
* 在有序陣列 nums 的[l, r]部分上,找到 value 的插入位置
*/public static int findinsertindex(int nums, int l, int r, int value) else
}return l;
}
參考:
6.選擇排序
時間複雜度 o(n²) 。
public class selectionsort ;
arr = sort(arr);
system.out.println(arrays.tostring(arr));
}public static int sort(int sourcearray) throws exception
}// 將找到的最小值和i位置所在的值進行交換
if (i != min)
}return arr;
}}
參考:
7.希爾排序
非穩定排序。
public static void shellsort(int arr){
int n = arr.length;
//進行分組,最開始的增量gap為陣列長度的一半
for (int gap = n>>1; gap >0; gap>>=1) {
//對各個分組進行插入排序
for(int i=gap;i=0 && temp參考:
8.雙軸快排
單軸快排、雙軸快排:參考:
常用排序演算法總結 選擇排序 java實現
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...
面試常用演算法總結 排序演算法(java版)
排序演算法 重要性不言而喻,很多演算法問題往往選擇乙個好的排序演算法往往問題可以迎刃而解 氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經...
java常用排序演算法
一 選擇排序 public class numbersort private static void read string args private static void print int arrays system.out.println private static void select...