
排序
三月软件----王耀峰
专注于php
展开
-
快速排序--双边扫描与单边扫描的实现
快速排序的思想(双边扫描)快速排序就像一个数据快,前后各有一个下标(指针)i/j,随机选取一个元素作为标志位,存储在临时变量中(tmp),j从后向前移动(j--)直到碰到比tmp还要小的数时与i交换,此时i开始像后走,直到遇到第一个比tmp大的数,与j交换。递归直至完成。运行环境:ubuntu 14.04 kylin#include #include void swap(l原创 2015-07-18 11:19:53 · 2297 阅读 · 0 评论 -
归并排序--自上而下和自下而上两种方法的实现
归并排序思想自上而下的递归对一个数组(str)选中一个中间位置(mid=(start+end)/2),分别进行左递归(mergeSort(str,start,mid,length)),右递归(mergeSort(str,mid+1,end,length)),在回朔的时候分别对以中间为分割的数组进行排序(merge(str,start,end,mid)),此时是一个归并的过程,这是自上而原创 2015-07-20 19:21:19 · 6310 阅读 · 1 评论 -
堆排序
堆排序利用堆的结构(其实就是二叉树)进行排序,首先对数据进行调整调整为一个大根堆或者小根堆,其次取出最大或最小的值放入最后一个页节点,继续调整剩余的二叉树形成一个新的堆,递归直到完成。其中有几个概念需要明白,对于一个有n个节点的完全二叉树第一个非页节点为(n/2-1),其左子树为 当前节点下标(i*2+1)。具体实现如下void stuckSmall(long *str,int sta原创 2015-07-22 19:16:13 · 1116 阅读 · 0 评论 -
选择排序(直接选择)
选择排序:O(n^2)思想:在冒泡的基础上作出的改进,不用每次都去交换,之和最小或者最大的下标交换,将其放入对应位置具体代码#include #include #include void swap(long *A,long *B){ long tmp; tmp = *A; *A = *B; *B = tmp;}void genrand(int len,原创 2015-09-29 01:56:02 · 921 阅读 · 0 评论 -
插入排序(折半插入)
插入排序:O(n^2)思路:将排序数组逻辑上分为两部分,一部分已经拍好续的(哪怕就一个数,或者没有),其余的为另一部分(未排序),读取未排序的部分,将值插入到已经排序过的序列的对应位置。#include #include #include void genrand(int num,long * array){ if(num100) return; srand((原创 2015-09-29 02:11:49 · 1219 阅读 · 0 评论