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实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...
冒泡排序是一种简单直观的排序算法,通过不断交换相邻的不正确顺序元素来达到排序的目的。它的时间复杂度为O(n^2),在处理大量数据时效率较低。尽管效率不高,但其稳定性(即相等元素的相对位置不会改变)使其在特定...
本资料包聚焦于"Java常用排序算法"和"程序员必须掌握的8大排序算法",并深入探讨了"二分法查找"这一高效搜索技术。 首先,我们来看八大排序算法。这些算法包括: 1. **冒泡排序**:最简单的排序方法,通过不断交换...
冒泡排序--Java常用排序算法程序员必须掌握的8大排序算法
以下是关于"Java常用排序算法"的详细解释: 1. 插入排序(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常生活中整理扑克牌的过程。算法分为两个阶段:遍历待排序的数组,将每个...
详解Java常用排序算法-选择排序 选择排序(Selection Sort)是一种简单的排序算法,它的基本思想是每次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的元素排完。 选择...
插入排序是一种简单的排序算法,它通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),但它的最好...
Java常用排序算法-归并排序 归并排序是一种分治思想的排序算法,其基本思想是将待排序的数组分成若干个子序列,每个子序列都是有序的,然后再将子序列合并成一个有序的数组。这种算法的时间复杂度为O(n log n),...
本文将深入探讨Java中的八大常用排序算法,这些算法对于提升程序效率、优化数据处理具有重要意义。这8大排序算法包括:冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序以及桶排序。 1. **冒泡...
Java排序算法 - 插入排序 插入排序(Insertion Sort)是一种简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。该算法的实现非常简单,但其时间复杂度...
在 Java 中,快速排序算法可以使用递归函数来实现。例如,下面的代码就是一个使用快速排序算法对整数数组进行排序的示例: ```java public class Quick { public static void quickSort(int[] arr, int low, int ...
Java 基数排序算法详解 基数排序(Radix Sort)是一种非比较排序算法,它的基本思想是将待排序的数组按照位数(个位、十位、百位)进行划分,然后依次对每个位上的数字进行排序,最终得到有序的数组。基数排序的...
冒泡排序是最简单的排序算法之一,通过重复遍历待排序的元素列表,比较相邻元素并交换位置,直至列表排序完成。在Java中,冒泡排序通常使用两层循环实现。 2. 插入排序(Insertion Sort): 插入排序通过创建一个...
本篇文章将深入探讨两种常见的Java排序算法:Shell排序和快速排序,并介绍一种改进后的快速排序方法。 1. Shell排序: Shell排序,由Donald Shell在1959年提出,是一种基于插入排序的算法,通过将待排序数组分为...
本主题将深入探讨Java实现的选择排序算法,这是一种简单直观的排序算法,适合新手学习。 选择排序(Selection Sort)的基本思想是,在未排序的序列中找到最小(或最大)的元素,放到序列的起始位置,然后再从剩余未...
### Java常用八大排序算法详解 #### 一、直接插入排序 **基本思想:** 直接插入排序的基本思路是在要排序的一组数中,假设前面 (n-1) [n>=2] 个数已经排好顺序,现在要把第 n 个数插入到前面的有序数列中,使得这 ...