![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
string_win
这个作者很懒,什么都没留下…
展开
-
冒泡排序
算法描述:排序的过程和排序的名字相同,这里描述的是排序从小到大的过程。每次都从第一个数开始遍历,将这个数和后面一个数对比,如果这个数的大于后面一个数,那么就把这两个数交换,如果这个数小于后面一个数,那么就拿后面一个数和后面一个数的后一个数比较,第一轮遍历过后,最后一个数就是最大的一个数了。然后第二轮遍历的次数减少一。以此类推。时间复杂度:两次循环,时间复杂度O(n2),效率比较低。原创 2016-01-11 17:57:43 · 280 阅读 · 0 评论 -
选择排序
算法描述:从小到大排序:选择第二个到最后中最小的,将它与第一个交换,再选择第三个到最后的最小的,将它与第二个交换,以此类推。时间复杂度:两重循环,时间复杂度是O(n2),较为繁琐。代码如下:#include using namespace std;void SelectSort(int a[], int n){ for(int i = 0; i < n; i++)原创 2016-01-11 18:28:12 · 218 阅读 · 0 评论 -
插入排序
算法描述:从第二个值开始向左查找,找到适合的位置插入。实现过程是:如果找到比它本身大的交换,如果找到比它小的,插在该值的后面。时间复杂度:平均时间复杂度为O(n2),输入的数据越有序,速度越快。最快可以达到线性时间O(n)。代码如下:#include using namespace std;void InsertionSort(int a[], int n){ fo原创 2016-01-11 19:02:23 · 258 阅读 · 0 评论 -
快速排序(随机化版本)
算法描述:每次选择一个值,将比它小的值放在它的左边,比它大的值放在它的右边。不断递归调用即可。时间复杂度:平均复杂度O(nlgn),最大复杂度为O(n2),最小复杂度为O(n)。有序程度越高,复杂度越大。最高时是每次换位都是全部分到同一边。但快速排序的稳定性比较强, 大部分都是接近于平均情况。如果每次取得值选择的是随机值,那么就稳定在平均复杂度了。代码如下(随机化版本)#include原创 2016-01-11 21:25:07 · 507 阅读 · 0 评论 -
线性时间排序:计数排序
算法描述:找出每一个数值在改数组中有多少个值比它小,那么就可以把这个数放在第n+1位。算法实现:遍历每一个a[i],是的c[a[i]]++。然后计算每一个数前面有多少个数。在把这些书转移,一共会用到三个数组。时间复杂度:O(n+k),k为数据的个数。比较适用于数据量大,且比较密集的情况。代码如下:#include using namespace std;int main原创 2016-01-11 22:17:11 · 256 阅读 · 0 评论 -
归并排序
算法分析:归并排序使用的是分治的思想,分、治、和。不断把数组二分,知道每一个小数组只有一个元素,然后在逐层合并。时间复杂度:O(nlgn)#include using namespace std;void merge1(int a[], int b[], int p, int r, int q){ int i = p, j = r+1, k = p; while原创 2016-01-11 19:03:29 · 365 阅读 · 0 评论