排序算法
小菜鸡LC
这个作者很懒,什么都没留下…
展开
-
排序算法——基数排序
设排序数组的个数为n,数组中最大元素的位数为d。时间复杂度:0(d×2n),2n代表的是一趟分配需要O(n),一趟收集需要O(n),这样的循环一共需要d次。空间复杂度:O(n)稳定性:稳定算法原理:它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。基数排序的方式可以采用最低位优先LSD(Least sgnificant digital)法或最高位优原创 2021-12-03 14:31:33 · 222 阅读 · 0 评论 -
排序算法——希尔排序
时间复杂度:由于希尔排序的时间复杂度依赖于增量序列的函数,时间复杂度分析起来比较困难。当n在某个特定范围内的时候,希尔排序的时间复杂度约为O()。空间复杂度:O(1)算法稳定性:不稳定算法原理:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<d(t-1)<....d2<d1),即所有记录放在同一组中进行直接插入原创 2021-12-03 13:25:04 · 741 阅读 · 0 评论 -
排序算法——堆排序
时间复杂度(平均):O(n㏒₂n)空间复杂度:O(1)稳定性:不稳定算法原理:利用完全二叉树的原理,将数组利用二叉树的形式,找到最大值,即根节点为整棵树的最大值。图示:1.buildheap(构造二叉树的过程)2.maxheapfy(调整二叉树的过程)代码: public static void heap_sort(int array[]){ int length=array.length; buildHeap(array,l..原创 2021-12-01 20:43:38 · 74 阅读 · 0 评论 -
排序算法——归并排序
时间复杂度(平均):O(n㏒₂n)空间复杂度(平均):O(n)稳定性:稳定算法原理:先将原序列分割成不可划分的子序列,再将子序列两两合并排序,最终得到有序序列。图示:代码:public static void merge_sort(int array[],int l,int r){ if(l<r){ int m=(l+r)>>1; merge_sort(array,l,m); .原创 2021-12-01 20:02:54 · 86 阅读 · 0 评论 -
排序算法——快速排序
时间复杂度(平均):O(n㏒n)空间复杂度(平均):O(㏒n)稳定性:不稳定算法原理:首先选出一个数作为基准,将比基准小的放到前面,比基准大的放到后面,然后再利用递归的方式对两个子序列进行同样的操作。图示:代码:public static void quick_sort(int array[],int start,int end){//end=array.length-1 if(start<end) { int key = arr.原创 2021-12-01 19:31:21 · 70 阅读 · 0 评论 -
排序算法——插入排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:稳定算法原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。代码: public static void insert_sort(int array[]){ int n=array.length; for(int i=0;i<n;i++){ int temp=array[i]; for(int j=原创 2021-12-01 18:48:47 · 360 阅读 · 0 评论 -
排序算法——选择排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:不稳定(举例:序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。)算法原理:它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。与冒泡排序区别: 冒泡排序实质是两两交换,选择排序是选择最小(大)的,虽然最终的结果都是将最小(大)的元素放到数列一端,但是原理并...原创 2021-11-30 22:36:23 · 648 阅读 · 0 评论 -
排序算法——冒泡排序
时间复杂度:O(n²)空间复杂度:O(1)算法稳定性:稳定算法原理:其基本思路是,对于一组要排序的元素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。(就是每次循环将最小的数放到最前面)代码:public static void bubble_sort(int array[]){ int lengh=array.length; for(int原创 2021-11-30 22:08:18 · 483 阅读 · 0 评论