Java常用八種排序演算法

2021-08-18 03:33:21 字數 3881 閱讀 3622

* 1.直接插入排序(穩定)

* 原理:將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。

* 要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。

* */

public class insertsort ;

public static void insertsort(int array)

array[j + 1] = temp;

}system.out.println("插入排序:" + arrays.tostring(array));

}public static void main(string args)

}

/**

* 2.希爾排序

* 原理:又稱縮小增量排序。先將序列按增量劃分為元素個數相同的若干組,使用直接插入排序法進行排序,然後不斷縮小增量直至為1,最後使用直接插入排序完成排序。

* 要點:增量的選擇以及排序最終以1為增量進行排序結束。

* */

public class shellsort ;

public static void shellsort(int array)

array[end + len] = temp;}}

}system.out.println("希爾排序:" + arrays.tostring(array));

}public static void main(string args)

}

/**

* 3.直接選擇排序

* 原理:將序列劃分為無序和有序區,尋找無序區中的最小值和無序區的首元素交換,有序區擴大乙個,迴圈最終完成全部排序。選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣經過i遍處理之後,前i個記錄的位置已經是正確的了。

* */

public class selectsort ;

public static void selectsort(int array)

}array[position] = array[i];

array[i] = temp;

}system.out.println("選擇排序:" + arrays.tostring(array));

}public static void main(string args)

}

/**

* 4.堆排序

* 原理:利用大頂堆或小頂堆思想,首先建立堆,然後將堆首與堆尾交換,堆尾之後為有序區。

* 要點:建堆、交換、調整堆

* 兩個步驟:1.建堆

* 2.對頂與堆的最後乙個元素交換位置

* */

public class heapsort ;

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)

if (arr[k] > temp) else

}arr[i] = temp;// 將temp值放到最終的位置

}/**

* 交換元素

* @param arr

* @param a

* @param b

*/public static void swap(int arr, int a , int b)

public static void main(string args)

}

/**

* 5.氣泡排序(穩定)

* 原理:將序列劃分為無序和有序區,不斷通過交換較大元素至無序區尾完成排序。

* 要點:設計交換判斷條件,提前結束以排好序的序列迴圈。

* */

public class bubblesort ;

public static void bubblesort(int array) }}

system.out.println("氣泡排序:" + arrays.tostring(array));

}public static void main(string args)

}

/**

* 6.快速排序

* 原理:不斷尋找乙個序列的中點,然後對中點左右的序列遞迴的進行排序,直至全部序列排序完成,使用了分治的思想。

* 要點:遞迴、分治

* */

public class quicksort ;

// 分割

public static int partition(int a, int p, int r)

}temp = a[r];

a[r] = a[i];

a[i] = temp;

return i;

}public static void quicksort(int a, int p, int r)

}public static void main(string args)

}

/**

* 7.歸併排序(穩定)

* 原理:將原序列劃分為有序的兩個序列,然後利用歸併演算法進行合併,合併之後即為有序序列。

* 要點:歸併、分治

*/public class mergesort ;

// 歸併

public static void merge(int a, int low, int mid, int high) else

}// 把左邊剩餘的數移入陣列

while (i <= mid)

// 把右邊邊剩餘的數移入陣列

while (j <= high)

// 把新陣列中的數覆蓋a陣列

for (int m = 0; m < temp.length; m++)

}public static void mergesort(int a, int low, int high)

}public static void main(string args)

}

/**

* 8.基數排序(穩定)

* 要點:對關鍵字的選取,元素分配收集。

* */

public class radixsort ;

private static void radixsort(int array, int d)

// 將前乙個迴圈生成的桶裡的資料覆蓋到原陣列中用於儲存這一位的排序結果

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

}order[i] = 0;// 將桶裡計數器置0,用於下一次位排序

}n *= 10;

k = 0;// 將k置0,用於下一輪儲存位排序結果}}

public static void main(string args)

}

八種常用排序演算法

include include include define len 10 1 冒泡 將序列每輪找出的最大值從下標n到0依次存放 void bubble int data,int len 2 直插 void insert int array,int n array j 1 temp 3 將array...

八種排序演算法 Java實現

基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。實現 public class selectsort selectsort a for int i 0 i public static v...

八種基本排序演算法 java實現

將陣列公升序排列 思路 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。2.直接插入排序 public static void ...