![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基本排序算法
咸鱼没有翻身
这个作者很懒,什么都没留下…
展开
-
排序算法(1)--冒泡排序BubbleSort
冒泡排序,是将数组由小到大,或由大到小的一种排序算法。比较相邻的元素。如果第一个比第二个大,就交换他们两个。对第0个到第n-1个数据做同样的工作。这时,最大的数就“浮”到了数组最后的位置上。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。因此时间复杂度是O(n^2),空间复杂度是O(n)下面是没有经过优化,并且未使用sw...原创 2018-09-21 19:56:11 · 247 阅读 · 0 评论 -
排序算法(2)--选择排序SelectionSort
步骤:在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。最坏情况:O(n^2),最好情况:O(n^2)。代码实现:#include <stdio.h>#include <assert.h>void SelectSort(int *arr, i原创 2018-09-21 20:02:49 · 190 阅读 · 0 评论 -
排序算法(3)--直接插入排序InsertSort
介绍:插入排序的工作原理是,对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。越有序越快步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果被扫描的元素(已排序)大于新元素,将该元素后移一位4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置5.将新元素插入到该位置后6.重复步骤2~5时间复...原创 2018-09-21 20:05:29 · 297 阅读 · 0 评论 -
排序算法(4)--希尔排序ShellSort
介绍:希尔排序是插入排序的一种,是针对直接插入排序算法的改进。该方法又称缩小量排序,实质是分组插入排序。因DL.Shell于1959年提出而得名。希尔排序是非稳定排序算法。不稳定地排序算法,有跳跃式的交换数据。时间复杂度:是所取增量序列的函数。注意事项:应使增量序列中的值没有除1以外 的公因子,并且最后一个增量值必须等于1。希尔排序的基本思想是:间隔式分组,然后使用直接插入排序使组...原创 2018-09-21 20:12:17 · 174 阅读 · 0 评论 -
排序算法(5)--快速排序QuickSort(递归实现)
快速排序时间复杂度:平均O(nlogn)最差的情况就是每一次取到的元素就是数组中最小/最大的,这种情况其实就是冒泡排序了(每一次都排好一个元素的顺序)这种情况时间复杂度,就是冒泡排序的时间复杂度:T[n] = n * (n-1) = n^2 + n;综上所述:快速排序最差的情况下时间复杂度为:O( n^2 )空间复杂度:最优的情况下空间复杂度为:O(logn) ;每一次都平分数组的...原创 2018-09-21 20:14:47 · 695 阅读 · 0 评论 -
排序算法(5)--快速排序QuickSort(非递归实现)
非递归写法利用栈主要需要记录起始和结尾即low和high 的值,用循环只能处理一边,所以需要将temp后面的起始和结尾下标记录下来。利用栈来记录(也可以使用队列)。比如待排序数组为{7,3,9,6,0,15,5,13}来记录low 和high的值先入low,最后的是high逻辑步骤:假设数组中有n个待排序数字,1.设置一个low 和一个highlow指向当前待排序数组的最左边的下...原创 2018-09-22 20:18:30 · 452 阅读 · 0 评论