話說,學習算法在日常開發中,有多大的作用?
老實說,真沒多大的用處。
我目前從事企業系統運維,算法更是用不到。
那麼,又問自己,學習的目的是什麼?答:1,爲寫出更高質量的代碼做準備;2,提高邏輯思維能力;3,鍛鍊空間想象力
這裏推薦大家,在學習排序算法時候,以維基百科做參考。注意頁面的右上角,那兒顯示一張動態二維圖,具體描述了算法運算的整個過程,很有趣。
排序算法很多種,我相信精通了其中幾種,其他的便可推敲出來。
以下我是學習過的排序算法,並且都經過我一一測試,現在整理列出來。
一 冒泡排序
public class BubblleSort {
public static void main(String[] args){
int[] arr = {2,4,6,5,9};
sort(arr);
int k;
for(k = 0;k < arr.length;k++){
System.out.print(" " + arr[k]);
}
}
public static void sort(int[] arr){
int i, j, temp;
for(i = 1;i < arr.length;i++){
for(j = 0;j < arr.length - i;j++){
if(arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
二 插入算法
public class InsertionSort {
public static void main(String[] args){
int[] arr = {10,11,8,2,4,6,5,9};
sort(arr);
int k;
for(k = 0;k < arr.length;k++){
System.out.print(" " + arr[k]);
}
}
public static void sort(int[] arr){
int i, j, t;
for(i = 1;i < arr.length;i++){
t = arr[i];
j = i - 1;
while(j >= 0 && t < arr[j]){
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = t;
}
}
}
三 希爾排序
public class ShellSort {
public static void main(String[] args){
int[] arr = {10,11,8,2,4,6,5,9};
sort(arr);
int k;
for(k = 0;k < arr.length;k++){
System.out.print(" " + arr[k]);
}
}
public static void sort(int[] arr){
int i, j, h;
int r, temp;
int x = 0;
for(r = arr.length;r >= 1;r /= 2){
for(i = r;i < arr.length;i++){
temp = arr[i];
j = i - r;
while(j >= 0&&temp < arr[j]){
arr[j + r] = arr[j];
j -= r;
}
arr[j + r] = temp;
}
}
}
}
四 快速排序
public class QuickSort {
public static void QuickSort(int[] a, int left, int right) {
if (left < right) {
int key = a[left];
int i = left, j;
for (j = left + 1; j <= right; j++) {
if (a[j] < key) {
int temp = a[j];
a[j] = a[i + 1];
a[i + 1] = temp;
i++;
}
}
a[left] = a[i];
a[i] = key;
QuickSort(a, left, i - 1);
QuickSort(a, i + 1, right);
}
}
public static void main(String[] args) {
int arr[] = new int[] { 23, 213, 134, 44, 77, 78, 11, 43 };
QuickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.println("i: " + arr[i]);
}
}
}
五 選擇排序
public class SelectionSort {
public static void main(String[] args){
int[] arr = {10,11,8,2,4,6,5,9};
sort(arr);
int k;
for(k = 0;k < arr.length;k++){
System.out.print(" " + arr[k]);
}
}
public static void sort(int[] arr){
int i, index, temp;
for(i = 0;i < arr.length - 1;i++){
int j;
index = i;
for(j = i + 1;j < arr.length;j++){
if(arr[j] < arr[index]){
index = j;
}
}
if(index != i){
temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
}
}
}
One thing leads to another thing