算法逻辑思维(3)排序

本文介绍了排序问题,探讨了衡量排序算法优劣的三大标准:时间复杂度、空间复杂度和稳定性。接着详细讲解了冒泡排序、插入排序、归并排序和快速排序的原理及性能。冒泡排序和插入排序在最好情况下时间复杂度为O(n),但最坏情况下为O(n^2)。归并排序和快速排序平均时间复杂度为O(nlogn),其中快速排序不是稳定的排序算法。对于大规模数据,建议使用时间复杂度为O(nlogn)的排序算法。
摘要由CSDN通过智能技术生成

3.排序:经典排序算法原理解析与优劣对比
二分查找要求原数组必须有序
由无序到有序,是算法领域常见的一类问题,常用的排序算法有冒泡排序、插入排序、归并排序以及快速排序
3.1什么是排序问题
排序–让一组无序数据变成有序的过程,一般默认这里的有序都是从小到大的排列顺序
衡量一个排序算法的优劣:
1.时间复杂度–具体包括,最好时间复杂度、最坏时间复杂度以及平均时间复杂度
2.空间复杂度–如果空间复杂度为1,也叫做原地排序
3.稳定性–指相等的数据对象,在排序之后,顺序是否能保证不变
3.2冒泡排序
3.2.1冒泡排序的原理
从第一个数据开始,一次比较相邻元素的大小。如果前者大于后者,则进行交换操作,把大的元素往后交换。通过多轮迭代,直到没有交换操作为之。
3.2.2冒泡排序性能
最好时间复杂度是O(n)
也就是当输入数组刚好是顺序的时候,只需要挨个比较一遍就可以
冒泡排序的最坏时间复杂度是O(nn)
也就是当数组刚好是完全逆序的时候,每轮(排序都)需要挨个比较n次,并且重复n次
当输入数组杂乱无章时,它的平均复杂度是O(n
n)
空间复杂度为O(1)

public static void main(String[] args){
   
int[] arr = {
   1,0,3,4,5,-6,7,8,9,10};
System.out.println("原始数据" +Arrays.toString(arr));
boolean isAsc = true;
for(int i = 1 ; i < arr.length; i++){
   
for(int j = 0;j<arr.length - i; j++){
   
if(arr[j] >arr[j+1]){
   
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}	
}
}
}

3.3插入排序
3.3.1插入排序的原理
选取未排序的元素,插入到已排序区间的合适位置,直到未排序区间为空。
3.3.2插入排序的性能
插入排序最好的时间复杂度是O(n)
即当数组刚好是完全顺序的时候,每次只用比较一次就能找到正确的位置区间
插入排序最坏时间复杂度则需要O(NN)
即当数组刚好是完全逆序时,每次都要比较n次才能找到正确的位置区间
插入排序的平均时间复杂度是O(n
n)。因为往数组中插入一个元素的平均时间复杂度为O(n)
而插入排序可以理解为重复n次的数组插入操作
空间复杂度为O(1)。冒泡排序过程当中,当元素相同时不做交换,所以冒泡排序是稳定的排序算法。代码如下:

public static void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值