[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...