
排序
文章平均质量分 70
Qiana_Wu
坚持不懈的编程
展开
-
插入排序
插入排序 对一个已经有序的数据序列插入一个数。要求插入后此数据序列仍然有序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到原创 2017-11-19 11:23:51 · 768 阅读 · 0 评论 -
选择排序的介绍
选择排序是一种简单直观的排序算法,最大的数和最小的数不断交换,一趟排序下来,会将最大的数放在最后一个位置,最小的数放在起始位置。第二趟排序选出次大和次小的数,依次类推。 算法思想: 第一趟:MAX是9,MIN是0,MIN和begin交换,begin处为最小的数,MAX和end交换,end处为最大的数。begin++,end--,同理,begin处为次小的数,end处为次大的数。 当beg原创 2018-01-21 16:37:13 · 351 阅读 · 0 评论 -
堆排序
1.什么是堆? 堆其实是一颗完全二叉树,堆分为大堆和小堆。所谓大堆,就是父节点的值大于等于左右孩子结点的值,即a[i] >= a[2*i+1] && a[i] >= a[2*i+2]。所谓小堆,就是父节点的值小于等于左右孩子结点的值,即a[i] 堆排序是用堆这种数据结构设计的一种排序算法,是选择排序的一种。利用数组的特点快速定位到指定索引的元素。 2.算法思想 首先建一个大堆,堆顶原创 2018-01-21 22:44:26 · 239 阅读 · 0 评论 -
交换排序:冒泡排序和快速排序
交换排序分为冒泡排序和快速排序。 冒泡排序: 它是一种比较简单的排序方法,相邻两个元素两两比较,如果后一个比前一个大,就交换,每趟排序都可以将大的元素“浮”到顶端。外层循环循环n-1次,相当于排好了最大的n-1个元素的位置,则最后一个元素的位置就确定了。内层循环循环n-i次,两两交换,第一次排出最大元素在a[n-1]处;第二次循环n-1次,最大元素在a[n-2]处。 时间复杂度: ...原创 2018-01-25 22:48:12 · 347 阅读 · 0 评论 -
快速排序的非递归实现
快速排序的非递归主要使用栈来实现。void QuickSortNonR(int* a,int left,int right) { stack<int> s; s.push(right); s.push(left); while(!s.empty()) { int begin = s.top(); s.pop(); int end = s.top(); s.p...原创 2018-02-24 15:08:38 · 376 阅读 · 0 评论 -
归并排序
什么是归并排序? 归并排序采用了分治法(divide-and-conquer),将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解。归并排序的算法通常用递归实现,将带排序的区间[a,b]二分,再二分,直至每个小区间只有一个元素,则每个小区间都是有序的,将小区间两两有序合并,直至成为一个区间,此时该区间是有序的。完成归并排序主要有两个...原创 2018-02-24 17:14:46 · 304 阅读 · 0 评论