希尔排序算法分析及程序示例 | 冒泡排序算法分析及程序示例

希尔排序算法分析及程序示例 | 冒泡排序算法分析及程序示例
2011年09月01日
  实例说明:
  用快速排序的方法对数组进行排序。
  实例解析:
  快速排序 (QuickSort)
  快速排序是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。
  (1)分治法的基本思想,将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
  (2)快速排序的基本思想
  设当前待排序的无序区为 R[low..high], 利用分治法的基本思想如下:
  ① 分解。在 R[low..high] 中任选一个记录作为基准(pivot),以此基准将当前无序区划分为左、右两个较小的子区间 R[low..pivotpos-1] 和 R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为 pivot)的关键字 pivot.key,右边的子区间中所有记录的关键字均大于等于 pivot.key,而基准记录 pivot 则位于正确的位置(pivotpos)上,无需参加后续的排序。
  划分的关键是要求出基准记录所在的位置 pivotpos。划分的结果可以简单地表示为(注意 pivot=R[pivotpos]):R[low..pivotpos-1].keys=pivot.key) //pivot 相当于在位置 i 上
  j--; // 从右向左扫描,查找第 1 个关键字小于 pivot.key 的记录 R[j]
  if(ipivot.key
  R[j--]=R[i]; // 相当于交换 R[i] 和 R[j], 交换后 j 指针减 1
  }//endwhile
  R[i]=pivot; // 基准记录已被最后定位
  return i;
  }//Partition
  程序代码―快速排序
  #include
  #define MAX 255
  int R[MAX];
  int Partition(int i,int j){
  /*调用 Partition(R,low,high)时,对R[low..high]做划分,并返回基准记录的位置*/
  int pivot=R[i]; /* 用区间的第 1 条记录作为基准 */
  while(i=pivot) /*pivot 相当于在位置 i 上 */
  j--; /* 从右向左扫描,查找第 1 个关键字小于 pivot.key 的记录 */
  if(ipivot.key*/
  R[j--]=R[i]; /* 相当于交换 R[i] 和 R[j], 交换后 j 指针减 1*/
  }/*endwhile*/
  R[i]=pivot; /* 基准记录已被最后定位 */
  return i;
  }/*end of partition*/
  void Quick_Sort(int low,int high){ /* 对 R[low..high] 快速排序 */
  int pivotpos; /* 划分后的基准记录的位置 */
  if(lowMAX){
  printf("n must more than 0 and less than %d.\n",MAX);
  exit(0);
  }
  puts("Please input the elements one by one:");
  for(i=1;i
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值