排序算法总结
1.冒泡排序
冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。这个算法的名字由来是因为越小的元素会由交换慢慢浮到数列的顶端。
优化版的冒泡排序Java实现,增加了一个标记变量flag,内层循环没有改变,则直接退出循环。
public static void BubbleSort(int[] numbers) { int temp; boolean flag = true; for(int i = 0; i < numbers.length-1 && flag; i++) { flag = false; for(int j = numbers.length-2; j >= i;j--) { if(numbers[j] > numbers[j+1]) { temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; flag = true; } } } }
2.选择排序
工作原理:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾,以此类推,直到所有元素均排序完毕。
public static void SelectSort(int[] numbers) { int min,temp; for (int i = 0; i < numbers.length-1; i++) { min = i; for(int j = i+1; j < numbers.length; j++) { if(numbers[j] < numbers[min]) { min = j; } } if (i != min) { temp = numbers[i]; numbers[i] = numbers[min]; numbers[min] = temp; } } }
3.快速排序
基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
private static void quickSort(int[] arr, int low, int high) { int i,j,pivot,temp; if(low > high) { return; } i = low; j = high; pivot = arr[low]; while (i < j) { while (pivot <= arr[j] && i < j) { j--; } while (pivot >= arr[i] && i <j){ i++; } if(i < j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } arr[low] = arr[i]; arr[i] = pivot; quickSort(arr, low, i - 1); quickSort(arr, i + 1,high); }