1.冒泡排序
基本思路是:搜索整个值列,比较相邻元素,如果两者的相对次序不对,则交换它们,其结果是最大值“像水泡一样”移动到值列的最后一个位置上,这也是它在最终完成排序的值列中合适的位置。然后再次搜索值列,将第二大的值移动至倒数第二个位置上,重复该过程,直至将所有元素移动到正确的位置上。
时间复杂度O(n2),最佳情况是已排好序只比较n-1次,不用交换。
int[] bubbleSort(int[] a) { //每个都进行冒泡(一个一个来) for (int i = 0; i < a.length; i++) { //和前n-i个比较,把最大的数沉下去 int temp; for (int j = 0; j < a.length - i - 1; j++) { if (a[j] > a[j + 1]) { //交换 temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } return a; }
2.选择排序
基本思想:搜索整个值列,以找到最小值。将该值与值列中第一个位置上的值进行交换。搜索剩下的值列(第一个除外),以找到其中的最小值,然后将其与值列中第二个位置上的值进行交换。对值列中的每个位置重复该过程。在算法结束时,就完成了对值列的排序
选择排序改进了冒泡排序,将必要的交换次数从O(n2)减少到O(n),比较次数仍为O(n2).
int[] selectionSort(int []a){ for (int i = 0; i < a.length - 1; i++) { int min = i; // Find smallest name for (int j = i + 1; j < a.length; j++) { if (a[j] < a[min]) // 找到最小值 注意此处不是判断a[j]<a[i] min = j; } // Swap data if necessary if (min != i) { int temp = a[i]; a[i] = a[min]; a[min] = temp; } } return a; }
3 插入排序
基本思想:排序值列中的前2个值,并在必要时交换它们。在相对于前2个值(有序的)的适当位置插入值列的第三个值。然后,在相对于前3个值(有序的)的适当位置插入值列的第4个值。每进行一次插入操作,有序子集中的数值个数将递增1。重复该过程,直至值列中的所有值都按照次序排列为止。插入过程需要移动数组中的其他值,为插入的元素腾出存储空间。
在大多数情况下,它比冒泡排序快一倍,比选择排序快一些,仍需O(n2)时间。常被用在比较复杂的算法的最后阶段,比如快速排序。
int[] insertionSort(int[] a) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int j = i; while (j > 0 && temp < a[j - 1]) { a[j] = a[j - 1];//all larger elements are moved one pot to the right j--; } a[j] = temp; } return a; }
4 快速排序
5堆排序
6 几种排序的比较
一般不太使用冒泡排序,然而当数据量小时,他会有些应用价值。
选择排序虽然可以把交换次数降到最低,但比较的次数仍然很大。当数据量很小,并且交换数据相对于比较数据更加耗时,可以使用。
在大多数情况下,假设数据量较小或基本有序时,插入排序是三种中最好的选择。对于更大数据量的排序来说,快速排序是更好的选择。
相关推荐
Java常用排序算法 Java常用排序算法 Java常用排序算法 Java常用排序算法
java 常用排序算法 java 常用排序算法 java 常用排序算法
Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找 Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找
Java常用排序算法源码 稳定:冒泡排序、插入排序、归并排序和基数排序;不稳定:选择排序、快速排序、希尔排序、堆排序
详解Java常用排序算法-基数排序
详解Java常用排序算法-桶排序
详解Java常用排序算法-计数排序
详解Java常用排序算法-堆排序
详解Java常用排序算法-希尔排序
详解Java常用排序算法-插入排序
详解Java常用排序算法-冒泡排序
详解Java常用排序算法-快速排序
详解Java常用排序算法-归并排序
详解Java常用排序算法-选择排序
Java常用排序算法程序员必须掌握的8大排序算法Java开发Java经验技巧共16页.pdf.zip
Java所有排序算法大全 Java所有排序算法大全 Java所有排序算法大全 Java所有排序算法大全
关于各种排序算法的图形演示,做得很不错
十大常用排序算法(java实现),冒泡排序,简单选择排序等