冒泡排序和快速排序(java实现)
2017-12-06 10:41
211 查看
冒泡排序 Bubble Sort
在基于 “交换” 进行排序的方法中,冒泡排序是比较简单的一种。/** * 冒泡排序 * 时间复杂度为O(n^2),空间复杂度为O(1) */ public static int[] bubbleSort(int[] array){ boolean change = true; for (int i = array.length-1; i >= 1 && change; --i) { change = false; for (int j = 0; j < i; ++j) { if (array[j] > array[j+1]) { int t = array[j]; array[j] = array[j+1]; array[j+1] = t; change = true; } } } return array; }
大部分见到的冒泡排序是没有 change 变量的。change 变量的作用是,在序列初始有序或基本有序时可以减少比较的次数,还是有存在的必要的。
快速排序 Quick Sort
快速排序是对冒泡排序的一种改进。快速排序的平均时间复杂度为O(nlog n),最坏情况下为
O(n2)。所谓最坏情况,即原始顺序为逆序。
/** * 快速排序,是对冒泡排序的改进。 * 平均时间复杂度为O(nlog n),最坏情况下为O(n^2) */ public static int partition(int []array,int low,int hight){ int pivot = array[low]; while(low < hight) { while (low < hight && array[hight] >= pivot) hight--; array[low] = array[hight]; while (low < hight && array[low] <= pivot) low++; array[hight] = array[low]; } array[low] = pivot; return low; } public static void QSort(int []array,int low,int hight) { if (low < hight) { int pivotIndex = partition(array, low, hight); QSort(array, low, pivotIndex-1); QSort(array, pivotIndex+1, hight); } } public static void quickSort(int []array) { QSort(array,0,array.length-1); }
快速排序的核心思想是,经过一趟排序后将待排序列分为两个部分,其中一部分的值都要大于另一部分。然后分别将每部分再次排序,一直到整个序列有序。
partition 方法代表的是一趟排序。首先要确定一个支点 pivot ,一般可以取序列的第一个值。然后从序列的两端取值与支点比较,将大于支点的值放一端,小于的放另一端。
循环直至 low = hight ,此时序列被分为两部分,pivot 就处于当前 low/hight 的位置。返回支点的下标。
QSort 方法是递归调用 partition 方法,目的是分别对每个序列再次排序。
更多面试常见算法问题 欢迎 Star !
相关文章推荐
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- 冒泡排序和快速排序java实现
- java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试
- 程序员必知的8大排序(二)-------冒泡排序,快速排序(java实现)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现) .
- Java实现交换排序 之 冒泡排序和快速排序
- 必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序
- 最简单之Java实现冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序(转载请注明出处)
- [排序算法]:Java实现冒泡排序和快速排序
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- java 冒泡排序和快速排序 实现
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- Java实现四种排序:桶排序,冒泡排序,选择排序,快速排序
- Java 冒泡排序与快速排序的实现
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 冒泡排序和快速排序的java实现
- java实现冒泡排序,插入排序,选择排序,快速排序
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)