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

一、冒泡排序

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

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

三、插入排序

原理:从数组中的一个位置往前看,相邻的两个元素如果满足排序要求的条件,就直接进行下一轮的遍历检查,如果不满足,就与前一个位置的元素进行交换,然后继续往前看,直到这个元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){

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

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

相关推荐