常用排序演算法的Java實現

2021-09-02 15:09:43 字數 4097 閱讀 3829

[b]八大內部排序:[/b]

[img]

1.直接插入排序:時間複雜度o(n2),空間複雜度o(1),穩定的排序演算法

/**

* 直接插入排序

* * @param : arr

*/public static void insertsort(int arr)

arr[k+gap] = temp;}}

}}}

3.選擇排序:時間複雜度o(n2),空間複雜度o(1),不穩定的排序演算法

/**  

* 選擇排序

* 在未排序序列中找到最小元素,存放到排序序列的起始位置

* 再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。

* 以此類推,直到所有元素均排序完畢。

* @param numbers

*/

public static void selectsort(int arr)

}private static void buildmaxheap(int arr)

int half = arr.length / 2;

for (int i = half; i >= 0; i--)

}private static void maxheap(int arr, int heapsize, int index)

if (right < heapsize && arr[right] > arr[largest])

if (index != largest)

}

5.氣泡排序:時間複雜度o(n2),空間複雜度o(1),穩定的排序演算法

/**

* 氣泡排序

* * @param : arr

*/public static void bubblesort(int arr)}}

}

6.快速排序:時間複雜度o(nlogn),空間複雜度o(nlogn),不穩定的排序演算法

public static void quicksort(int arr)

/**

* 快速排序

* * @param arr

* @param start

* @param end

*/ private static void subquicksort(int arr, int start, int end)}}

}

8.基數排序:時間複雜度o(d(n+r)),空間複雜度o(n+r),穩定的排序演算法

r為基數,d為位數。則基數排序的時間複雜度為o(d(n+r))

/*** 基數排序

* @param arr: 待排列的陣列

* @param digit:排列數值中最大值位數 **/

public static void radixsort(int arr, int digit)

// 統計各個桶將要裝入的資料個數

for (i = begin; i <= end; i++)

// count[i]表示第i個桶的右邊界索引

for (i = 1; i < radix; i++)

// 將資料依次裝入桶中

// 這裡要從右向左掃瞄,保證排序穩定性

for (i = end; i >= begin; i--)

// 將已分配好的桶中資料再倒出來,此時已是對應當前位數有序的表

for (i = begin, j = 0; i <= end; i++, j++) }}

// 獲取x這個數的d位數上的數字

// 比如獲取123的1位數,結果返回3

private static int getdigit(int x, int d)

[b]八大排序演算法比較:[/b]

[img]

[color=red]注:直接選擇是演算法本身是穩定的,只是用順序儲存結構來表現時,會產生不穩定的情況,若用鍊錶來實現,則是穩定的。[/color]

八大排序演算法合集:

public class sort

arr[k+gap] = temp;}}

}}}/**

* 選擇排序

* 在未排序序列中找到最小元素,存放到排序序列的起始位置

* 再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。

* 以此類推,直到所有元素均排序完畢。

* @param numbers

*/

public static void selectsort(int arr)

}private static void buildmaxheap(int arr)

int half = arr.length / 2;

for (int i = half; i >= 0; i--)

}private static void maxheap(int arr, int heapsize, int index)

if (right < heapsize && arr[right] > arr[largest])

if (index != largest)

}/**

* 氣泡排序

* * @param : arr

*/public static void bubblesort(int arr)}}

}public static void quicksort(int arr)

/**

* 快速排序

* * @param arr

* @param start

* @param end

*/ private static void subquicksort(int arr, int start, int end)}}

}/**

* 基數排序

* @param arr: 待排列的陣列

* @param digit:排列數值中最大值位數 **/

public static void radixsort(int arr, int digit)

// 統計各個桶將要裝入的資料個數

for (i = begin; i <= end; i++)

// count[i]表示第i個桶的右邊界索引

for (i = 1; i < radix; i++)

// 將資料依次裝入桶中

// 這裡要從右向左掃瞄,保證排序穩定性

for (i = end; i >= begin; i--)

// 將已分配好的桶中資料再倒出來,此時已是對應當前位數有序的表

for (i = begin, j = 0; i <= end; i++, j++) }}

// 獲取x這個數的d位數上的數字

// 比如獲取123的1位數,結果返回3

private static int getdigit(int x, int d)

// 列印完整序列

public static void printarr(int arr)

system.out.println();

}public static void main(string args) ;

system.out.print("排序前:\t");

printarr(arr);

insertsort(arr);

shellsort(arr);

selectsort(arr);

heapsort(arr);

bubblesort(arr);

quicksort(arr);

mergesort(arr);

radixsort(arr,4);

system.out.print("排序後:\t");

printarr(arr);

}}

常用排序演算法java實現

氣泡排序 平均時間複雜度o n n 最好o n 最壞o n n 空間複雜度o 1 public void bubblesort int a show a 插入排序 平均時間複雜度o n n 最好o n 最壞o n n 空間複雜度o 1 public void insertsort int a a j...

常用排序演算法總結 選擇排序 java實現

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...

Java陣列常用排序演算法實現複習

冒泡演算法由雙層迴圈實現,其中外層迴圈用於控制排序輪數,一般是要排序的陣列長度減1次,因為最後一次迴圈只剩下乙個陣列元素,不需要對比,同時陣列已經完成排序了。而內層迴圈主要用於對比陣列中每個相鄰元素的大小,以確定是否交換位置,對比和交換次數以排序輪數而減少。演算法實現 package captain...