专题的前一篇讲了快速排序的始祖——霍尔快排,那么这里就简单地实现一下霍尔快排。补充说明下,快排的一个核心步骤是选取枢纽元,通常的做法是将第一个元素用作枢纽元,《算法导论》里的快排例子和Hoare快排都是这种枢纽元选择。先撇开效率不说,我们先看看Hoare快排的实现:香格里拉娱乐城01#include...
分类:
编程语言 时间:
2014-09-13 18:40:55
阅读次数:
315
选择首尾元素做枢纽元通常的、没有经过充分考虑的选择是将第一个或最后一个元素用作枢纽元。选择第一个元素作为枢纽元的程序例子可以参考专题的前一篇《快速排序里的学问:霍尔快排的实现》,而选择最后一个元素用作枢纽元的程序例子则可以参考《快速排序里的学问:快速排序的过程》这个算法导论里的例子。选择最后一个元素...
分类:
其他好文 时间:
2014-09-13 18:38:55
阅读次数:
251
前一篇文章讲到了选择枢纽元的几种方法,其实第二种是随机选择元素作为枢纽元。那么在这篇文章里就实现一个随机化排序。算法与前面《算法导论》里的例子差不多,只是在调用分割Partition时加入一个随机数,具体可以参看程序。PowerBetC语言代码为:01#include "stdio.h"02#inc...
分类:
其他好文 时间:
2014-09-13 18:32:35
阅读次数:
206
#include using namespace std;/*快速排序通过一趟排序,以轴点为界 分割为两部分:左部分 =length) //break; int i,key,j; if (low=key) //从高到低,直到找到第一个=length) //bre...
分类:
其他好文 时间:
2014-09-11 01:04:21
阅读次数:
228
几种排序方法:冒泡 希尔 插入 快排 堆排 归并
sort.h
#ifndef _SORT_H_
#define _SORT_H_
void insert_sort(int*, int);
void bubble_sort(int*, int);
void shell_sort(int *, int);
void quick_sort(int*, int, int);
voi...
分类:
其他好文 时间:
2014-09-09 23:04:39
阅读次数:
369
给出长度为n的序列,每次只能交换相邻的两个元素,问至少要交换几次才使得该序列为递增序列。解题思路:一看就是冒泡,交换一次记录一次就可以了但是n的范围达到50W,冒泡O(n^2)的复杂度铁定超时(即使有7000ms,其实这是一个陷阱)直接用快排又不符合题目的要求(相邻元素交换),快排是建立在二分的基础...
分类:
其他好文 时间:
2014-09-09 11:58:58
阅读次数:
201
稳定性、内 外存储、有序区、无序区稳定性(个人理解),原来相同的数相对位置不变,就是稳定的。平均时间复杂度最差时间复杂度辅助空间(空间复杂度)稳定否?最好时间复杂度选择排序不稳定希尔排序不稳定堆排序不稳定快排N*log(N)N2需要一个栈空间来实现递归最坏为N, 可以是log(N)不稳定冒泡N2N2...
分类:
其他好文 时间:
2014-09-09 11:33:58
阅读次数:
198
public class QuickSort { public static void sort(int arr[],int low,int high){ int l=low; int h=high; int temp=arr[low]; ...
分类:
其他好文 时间:
2014-09-09 11:15:48
阅读次数:
241
1. 快排 详见之前博文快速排序算法。 2. 堆排序 详见之前博文非递归方法的堆排序实现。 3. 简单排序(冒泡排序、选择排序和插入排序) 代码如下: #include #include #include #define N 20static void show(int *arr, int len)...
分类:
其他好文 时间:
2014-09-05 14:08:51
阅读次数:
198