排序算法
文章平均质量分 77
wildweedsyu
不积跬步,无以至千里。
展开
-
直接插入排序 C++实现
原理:插入排序的基本操作是“有序插入”,也就是将元素逐一插到有序序列中,保持序列有序,从而使有序序列的长度不断增加。对数组a[n]排序时,起初a[0]被认为是长度为1的有序子序列。然后,按照有序插入法,i从1到n-1循环地将a[i]插入到有序序列中。在插入a[i]前,数组a的前半段(a[0]a[i-1])是有序段,后半段(a[i]a[n-1])是停留于输入次序的无序段。插入a[i]使a[0]~a[i]有序。也就要为a[i[找到有序位置j(0<=j<=i),将a[i]插在a[j]的位置上。原创 2020-05-19 22:13:38 · 1985 阅读 · 0 评论 -
冒泡排序(简单交换排序) C++实现
冒泡排序属于简单交换排序算法,另外还有基于递归交换的快速排序算法。冒泡排序是稳定排序,时间复杂度O(n^2)。快速排序是不稳定排序,时间复杂度O(nlogn)。二者都是原地排序算法,但是快速排序要用到栈空间,空间复杂度O(logn);给出冒泡排序代码://冒泡排序算法//2020-05-18#include <iostream>using namespace std;void swap(int& x, int& y){ int temp = x; x .原创 2020-05-18 11:53:06 · 211 阅读 · 0 评论 -
快速排序算法 C++
快速排序又叫划分交换排序。由于实测结果这种排序方法速度非常快,故名快速排序。快速排序的基本原理是划分,具体说明如下:在数组a中任选一个元素作为划分元素(一般选择最左端元素)。换分元素也称中轴值或轴值。把数组a划分成左、中、右3段。其中划分元素x自成中段;其他小于x的元素都排在x之前,是左段;大于或等于x的元素都排在x之后,是右段。左段或右段中可能有一段为空。并递归地将左右各划分为3段,直到每段元素都不超过1,从而达到排序目的。//快速排序算法//2020-05-16#include <i.原创 2020-05-16 19:36:53 · 173 阅读 · 0 评论 -
归并排序 C++实现
参考以下博文实现归并排序,在此记录,便于温习。图解排序算法(四)之归并排序https://www.cnblogs.com/chengxiao/p/6194356.html基本思路:(递归实现)划分。将数组划分为两个长度较短的子片段,直到子片段中只有一个元素。当数组不能往下划分时,开始回溯,反复将两个长度较短的有序段合并成一个有序段(采用三指针法进行合并),直到数组中只含一个有序段。//归并排序算法//2020-05-14#include <iostream>using nam原创 2020-05-14 21:42:03 · 295 阅读 · 0 评论 -
堆排序 C++实现
参考下面链接博文,自己写了一个程序:https://www.cnblogs.com/chengxiao/p/6129630.html步骤1:构造初始堆,将给定无序序列构造成一个大顶堆。步骤2:将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素。如此反复进行交换、重建、交换。//堆排序算法//2020-5-14#include <iostream>using namespace std;void adjustHeap(int原创 2020-05-14 17:28:26 · 114 阅读 · 0 评论