摘要: 1. 简述 假设待排序数组为 int array[], 数组长度为n。 主要是利用堆的性质。对于升序排序,使用最大堆。 首先,建堆,使用递归后根序遍历得方法,通过交换元素,保证根元素比孩子元素大。 第1趟,堆顶元素array[0]与array[n-1]交换,保证array[n-1]的数值正确,根据array[0]新的数值更新堆。 第2趟,堆顶元素array[0]与array[n-2]交换,保证array[n-2]的数值正确,根据array[0]新的数值更新堆。 ··· 第n-1趟,堆顶元素array[0]与array[1]交换,保证array[1]的数值正确,根据 阅读全文
posted @ 2011-06-08 21:16 xiaodongrush 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 1. 简述 假设待排序数组为 int array[], 数组长度为n。快速排序是一个递归得方法。 当n==1的时候,停止排序。 当n>1的时候,首先选择数组中得一个元素作为基准,然后,把小于这个基准得元素放到这个基准的左边,把大于这个基准得元素放到这个元素得右边。 具体实现下面进行简单得说明,假设array[0]作为基准:首先,存储基准得值,int tmp=array[0];然后,两个指针,int left=0; int right = n-1;boolflag_left = false; // 初始从右边开始while(left< right) {if(flag_left == 阅读全文
posted @ 2011-06-08 15:58 xiaodongrush 阅读(363) 评论(1) 推荐(0) 编辑
摘要: 1. 简述 假设待排序数组为 int array[], 数组长度为n。归并排序是一个递归得方法。 当n==1时,停止递归。 当n>1时,开辟一个与array同样大小得数组,int tmp[] 将array[0]-array[n/2]得数组递归排序,将array[n/2+1]-array[n-1]的数组递归排序 将两部分数组,分别用两个指针,将小得元素一个一个放入到tmp数组中。 将tmp复制到array中,然后,释放tmp数组。2. 复杂度 平均时间复杂度为O(N*LogN),空间复杂度为O(N)。 稳定性是稳定得排序,注意程序中,两个指针在比较得时候,如果大小相同,应该把第一个指针得数 阅读全文
posted @ 2011-06-08 14:05 xiaodongrush 阅读(261) 评论(0) 推荐(0) 编辑