程序员必备的八大排序算法

一、冒泡排序

这个排序应该是大部分程序员刚学习代码接触的第一个排序算法,它的原理也很简单,相邻的元素进行比较,满足条件就进行交换,总共需要遍历n轮。

时间复杂度O(N^2)
空间复杂度O(1)

程序员必备的八大排序算法
到n轮进行完之后,整体就会有序。

三、插入排序

原理:从数组中的一个位置往前看,相邻的两个元素如果满足排序要求的条件,就直接进行下一轮的遍历检查,如果不满足,就与前一个位置的元素进行交换,然后继续往前看,直到这个元0素之前所有元素都满足排序所要求的条件再进行下一轮检查。

某些情况可能比选择和冒泡排序时间复杂度更优,可以认为是时间复杂度O(N^2)最好的一种排序。

时间复杂度O(N^2)
空间复杂度O(1)

程序员必备的八大排序算法
左边排好序的数组与右边排好序的数组中的元素从各自的第一个元素开始两两比较,满足条件就向下边的辅助数组中放元素,指针向右移,继续比较,最后哪个数组有剩余的元素挨个放到辅助数组当中去。最后数组做到有序。

五、快速排序

原理:荷兰国旗思想,把数组分为了三个区域,小于这个数的放左边区域,等于这个数放中间区域,大于这个数的放右边区域,递归从而让数组整体有序。

时间复杂度O(N*logN)
空间复杂度O(logN)

程序员必备的八大排序算法

在快速排序中,往往需要从数组中找个随机数来作为划分值。和归并排序一样都是使用了压栈(先入
后出)的思想。

    public static void quickSort(int[] arr){if (arr==null||arr.length2){    return;}quickSort(arr,0,arr.length-1);    }    private static void quickSort(int[] arr, int l, int r) {if (lr){    swap(arr,(int)(l+(Math.random()*(r-l+1))),r); //从数组中随机选取一个作为划分值    int[] p=partition(arr,l,r); //返回左边界和右边界    quickSort(arr,l,p[0]-1);//递归    quickSort(arr,p[1]+1,r);//递归}    }    private static int[] partition(int[] arr, int l, int r) {int less=l-1;int more=r;while (lmore){

来源:m旧裤子

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月22日
下一篇 2022年1月22日

相关推荐