内部排序
内部排序:排序期间元素全部存放再内存中的排序;
外部排序:排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断地在内、外存之间移动的排序.
插入排序
直接插入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| void insertionSort(vector<int>& arr) { int n = arr.size(); for (int i = 1; i < n; ++i) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } }
public static void insertionSort(int[] arr){ if (arr == null || arr.length < 2){ return; } for (int i = 1; i < arr.length; i++){ for (int j = i - 1; j >= 0 && arr[j] > arr[j+1]; j--){ swap(arr, j, j + 1); } } }
|
折半插入
其实就是基于二分查找,找到要插入的位置,然后再把大的全部往后移。
希尔排序
选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public static void selectionSort(int[] arr){ if (arr == null || arr.length < 2){ return; } for (int minIndex, i = 0; i < arr.length - 1; i++){ minIdex = i; for (int j = i + 1; j < arr.length; j++){ if (arr[j] < arr[minIndex]){ minIndex = j; } } swap(arr, i, minIndex); } }
|
冒泡排序
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static void bubbleSort(int[] arr){ if (arr == null || arr.length < 2){ return; } for (int end = arr.length - 1; end > 0; end--){ for (int i = 0; i < end; i++){ if (arr[i] > arr[i+1]){ swap(arr, i, i+1); } } } }
|
快速排序
见重要排序算法的[快排](重要排序算法 - cwdp.sky)
堆排序
见[堆排序](堆及堆排序 - cwdp.sky)
归并排序
见重要排序算法的[归并排序](重要排序算法 - cwdp.sky)
基数排序
见重要排序算法的堆[基数排序](重要排序算法 - cwdp.sky)
外部排序