快速排序算法 C语言实现
来源:互联网 发布:测斜仪数据计算 编辑:程序博客网 时间:2024/04/30 17:59
快速排序算法(QuickSort)
1.算法思想
快速排序是一种划分交换排序,采用了分治策略,通常称为分治法。
(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≤R[pivotpos].key≤R[pivotpos+1..high].keys
其中low≤pivotpos≤high。
②求解:
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
③组合:
因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步
骤无须做什么,可看作是空操作。
第一步:找到一个基准数;把小于这个数的数都放到左边,把大于这个数的数都放到右边;
第二部:对基准数左边和右边的数,重复第一步;
2.快速排序算法的C语言实现/**********快速排序算法*****************/void QuickSort(char s[],int low,int high){int i;int last; //记录基准的位置if(low<high) //当数组中的元素个数大于1时,才进行操作{last=low; //选取第一个元素作为基准//把小于基准元与大于基准元的分开,last记录它们分开的界限for(i=low+1;i<=high;i++){if(s[i]<s[low])swap(s,++last,i);}swap(s,last,low);//基准元与界限交换,这样的话,基准元两边就是一边大于,一边小于;QuickSort(s,low,last-1); //对左区间递归排序QuickSort(s,last+1,high);//对右区间递归排序}}/*交换数组中的两个元素*/void swap(char s[],int i,int j){int temp;temp=s[i];s[i]=s[j];s[j]=temp;}
为排序整个文件,只须调用QuickSort(R,0,n-1)即可完成对R[0..n-1]的排序。
- 快速排序C语言算法实现
- c语言实现快速排序算法
- 快速排序算法的c语言实现
- 快速排序算法的C语言实现
- 算法导论C语言实现: 快速排序
- 快速排序算法 C语言实现
- 直白快速排序算法,C语言实现
- C语言快速排序算法实现
- 【算法】C语言实现的快速排序
- C语言实现数组快速排序算法
- C语言---快速排序算法实现
- 快速排序算法的C语言实现
- C语言实现快速排序算法
- 用C语言实现快速排序算法
- 用C语言实现快速排序算法
- 快速排序算法的C语言实现
- C语言实现快速排序算法
- 快速排序算法-C语言实现
- [转载]压缩跟踪Compressive Tracking综述
- 关于像素的邻接,连接和连通
- 我对编程的认知
- 关于数组的复习以及定义一个类(关于内存的理解)
- servlet/JSP自定义标签/Filter/Listener/新特性
- 快速排序算法 C语言实现
- 叶君--国画作品“万山红遍”被中南海收藏
- c++程序学习
- Python:Python正则表达式指南
- linux下mysql-5.5.27.tar.gz源程序包安装实例
- 需求分期三步走
- C#中JSON数组填充给Combox控件
- 叶君—国画大师笔下的“忠义千秋”
- mysql必知必会 第十三章 分组数据