冒泡
public static void bubbleSort(int arr[], int length) {for (int i = 0; i < length; i++) {for (int j = 0; j < length - i - 1; j++) {if (arr[j] > arr[j + 1]) {int temp;temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}}}
选择
public static void selectionSort(int arr[], int length) {int index, temp;for (int i = 0; i < length; i++) {index = i;for (int j = i + 1; j < length; j++) {if (arr[j] < arr[index]) {index = j;}}if (index != i) {temp = arr[i];arr[i] = arr[index];arr[index] = temp;}}}
插入排序
void InsertSort(int arr[], int length) {for (int i = 1; i < length; i++) {int j;if (arr[i] < arr[i - 1]) {int temp = arr[i];for (j = i - 1; j >= 0 && temp < arr[j]; j--) {arr[j + 1] = arr[j];}arr[j + 1] = temp;}}}
快速排序
// 快速排序void QuickSort(int arr[], int start, int end) {if (start >= end) {return;}int i = start;int j = end;// 基准数int baseval = arr[start];while (i < j) {// 从右向左找比基准数小的数while (i < j && arr[j] >= baseval) {j--;}if (i < j) {arr[i] = arr[j];i++;}// 从左向右找比基准数大的数while (i < j && arr[i] < baseval) {i++;}if (i < j) {arr[j] = arr[i];j--;}}// 把基准数放到i的位置arr[i] = baseval;// 递归QuickSort(arr, start, i - 1);QuickSort(arr, i + 1, end);}
归并排序
/*** 归并排序** @param array*/public static void MergeSort(int[] array) {int left = 0;int right = array.length - 1;MergeSortRecursive(array, left, right);}/*** 归并排序的递归方法** @param array* @param left* @param right*/public static void MergeSortRecursive(int[] array, int left, int right) {if (left >= right) {return; //递归的停止判断,没有这个判断会报StackOverflowError}int mid = (left + right) / 2;MergeSortRecursive(array, left, mid);MergeSortRecursive(array, mid + 1, right);Merge(array, left, mid, right);}/*** 归并排序中合并方法** @param array* @param left* @param mid* @param right*/public static void Merge(int[] array, int left, int mid, int right) {int r_left = mid + 1; //需要合并数组中右边数组第一个数索引int[] tempArray = new int[array.length];//一个临时数组,用于合并时暂时存储int newIndex = left; //临时数组索引int tempLeft = left; //合并完了以后,用于复制数组的索引while (left <= mid && r_left <= right) { //将部分的数放入到临时数组中if (array[left] < array[r_left]) {tempArray[newIndex++] = array[left++];} else {tempArray[newIndex++] = array[r_left++];}}while (left <= mid) {tempArray[newIndex++] = array[left++]; //将左边还剩余的数放入临时数组(若需要合并的左边还剩余数)}while (r_left <= right) {tempArray[newIndex++] = array[r_left++];//将右边还剩余的数放入临时数组(若需要和并的右边还剩余数)}while (tempLeft <= right) {array[tempLeft] = tempArray[tempLeft++]; //将临时数组复制到array}}
希尔排序
void ShellSort(int arr[], int length) {int increasement = length;int i, j, k;do {// 确定分组的增量increasement = increasement / 3 + 1;for (i = 0; i < increasement; i++) {for (j = i + increasement; j < length; j += increasement) {if (arr[j] < arr[j - increasement]) {int temp = arr[j];for (k = j - increasement; k >= 0 && temp < arr[k]; k -= increasement) {arr[k + increasement] = arr[k];}arr[k + increasement] = temp;}}}} while (increasement > 1);}
