温故知新,基础复习(快速排序及优化)
来源:互联网 发布:井泵电机数据 编辑:程序博客网 时间:2024/05/18 04:59
温故知新,基础复习(快速排序及优化)
使用了三值取中和插排优化
#include<stdio.h>#define InsertSortNumber 10void InsertSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex){printf("low=%d,high=%d\n",LowIndex,HighIndex);for (unsigned int i = LowIndex + 1; i <= HighIndex; ++i){int TempValue = Arra[i];unsigned int j = i;for (; j > LowIndex && TempValue<Arra[j-1]; --j){Arra[j]=Arra[j-1];}printf("j=%d,i=%d\n",j,i);if(j!=i) {Arra[j]=TempValue;}}}int GetPivotByMedianOfThree(int Arra[],unsigned int LowIndex,unsigned int HighIndex){int MedianIndex = LowIndex +(HighIndex - LowIndex)/2;if (Arra[MedianIndex]<Arra[LowIndex]){int TempValue = Arra[LowIndex];Arra[LowIndex]=Arra[MedianIndex];Arra[MedianIndex]=TempValue;}if (Arra[MedianIndex]<Arra[HighIndex]){return Arra[MedianIndex];}else if (Arra[HighIndex]>Arra[LowIndex]){return Arra[HighIndex];}return Arra[LowIndex];}unsigned int Partition(int Arra[],unsigned int LowIndex,unsigned int HighIndex,int PivotValue){while(1){while(Arra[LowIndex]<PivotValue) {LowIndex++;}while(Arra[HighIndex]>PivotValue) {HighIndex--;}if (LowIndex>HighIndex){return LowIndex;}int TempValue = Arra[LowIndex];Arra[LowIndex]=Arra[HighIndex];Arra[HighIndex]=TempValue;LowIndex++;HighIndex--;}}void QuickSort(int Arra[],unsigned int LowIndex,unsigned int HighIndex){if ((HighIndex+1) - LowIndex > InsertSortNumber){int PivotValue = GetPivotByMedianOfThree(Arra,LowIndex,HighIndex);unsigned int MedianCutIndex = Partition(Arra,LowIndex,HighIndex,PivotValue);printf("PivotValue=%d,MedianCutIndex=%d\n",PivotValue,MedianCutIndex);QuickSort(Arra,LowIndex,MedianCutIndex-1);QuickSort(Arra,MedianCutIndex,HighIndex);}else {InsertSort(Arra,LowIndex,HighIndex);}}int main(){int Arra[] = {1,2,3,50,-5,-7,20,-3,-5,10,13,8,6,4,2,0,-2,-4,-6,-8,18}; //int Arra[] = {1,2,3,50,-5,-7,20,-3,10,8}; //int Arra[] = {3,4,6,8,5,1};QuickSort(Arra,0,sizeof(Arra)/sizeof(Arra[0])-1);//InsertSort(Arra,0,sizeof(Arra)/sizeof(Arra[0])-1);printf("%d",Arra[0] );for (unsigned int i = 1; i < sizeof(Arra)/sizeof(Arra[0]); ++i){printf(",%d",Arra[i] );}}
待完善聚集重复元素的优化
1 0
- 温故知新,基础复习(快速排序及优化)
- 温故知新,基础复习(二叉堆排序)
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化
- 快速排序及优化(Java版)
- 快速排序代码及实现(优化)
- 快速排序算法及优化
- 快速排序及一些优化
- 快速排序算法及优化
- 排序算法复习(1)-- 快速排序
- 【手写排序算法及优化】快速排序
- 快速排序及优化(三路划分等)
- 算法导论学习笔记(一)快速排序及优化
- POJ2980大整数乘法
- Linux kernel 分析之六:内核启动-开启页面映射
- jsp之过滤器
- STL容器效率比较
- centos6.5使用ceph,添加rbd为内核模块
- 温故知新,基础复习(快速排序及优化)
- 读《所谓软件工程》
- wpf 如何在一个页面中调用另一个页面的函数
- Mysql隔离级别初识
- Copy,mutableCopy和retain的区别的小理解
- 网络拓扑
- 013.package 访问控制符
- weblogic宕机crash问题解决分享
- 第一篇 七月二十一