一、冒泡排序
这个排序应该是大部分程序员刚学习代码接触的第一个排序算法,它的原理也很简单,相邻的元素进行比较,满足条件就进行交换,总共需要遍历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进行处理,非常感谢!