数据结构之——快速排序
来源:互联网 发布:风靡一时的网络歌曲 编辑:程序博客网 时间:2024/06/07 22:01
#include <stdio.h>#include <stdlib.h>#define true 1#define false 0typedef int bool;//输入一个数组,进行快速排序后输出//快排子函数,输入参数为数组名和数组最小的下标和最大的下标//快速排序的实现依赖于递归,该首先确定了某个元素在序列中的位置后,将原序列分为左右两个部分,然后按照先左,再右的顺序进行递归void quick_sort(int * a, int low ,int high){ int pos = low; if(low < high) { pos = locate(a,low,high); quick_sort(a,low,pos-1); quick_sort(a,pos+1,high); }}//将 low 位置上的元素在数组中确定其定位,并返回位置序号 pos ;快排程序理解的难点一是递归,二是这个子函数int locate(int* a,int low ,int high){ int val = a[low]; //定位此次递归中,最左侧元素 a[low] 的位置,并返回位置序号 pos while(low < high) { while(low < high && a[high] > val) //最右侧元素比 val 的值大时,high-- ,直到 a[high]不再大于 val 也就是说,此时的a[high]必须要换到a[low]了 high--; //再出现在这儿不合适了 a[low] = a[high]; while(low < high && a[low] < val) //最左侧的元素比 val 的值小时, low++ ,直到 a[low]不再小于 val ,也就是说,此时的a[low]应该出现在val 的右侧 low++; a[high] = a[low]; } a[low] = val; //当以上 while 循环结束后,必然有 low == high 此时的位置,即为 val 这个元素应该在的位置,并返回此位置 return low; //此位置返回后,又会将原序列分为左右两部分,然后按照先左边,再右边的顺序递归,并且每次递归了,都是确定其每个子序列最左侧元素的位置}int main(){ int num,i; char c; printf("请输入数组元素的个数 = \n"); scanf("%d",&num); int a[num]; printf("请输入数组元素,每个元素以逗号隔开\n"); for(i=0;i<num;i++) { if(scanf("%c",&c)==',') break; scanf("%d",&a[i]); } quick_sort(a,0,num-1); for(i=0;i<num;i++) { printf("%d ",a[i]); } return 0;}
0 0
- 再看数据结构之——快速排序
- 数据结构之——快速排序
- 数据结构之——快速排序
- 数据结构 — 快速排序
- 数据结构例程—— 交换排序之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之------快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- HandlerThread,Handler,Thread使用方法
- AsyncTask
- JSON Session 一般处理程序的用法
- 杭电oj2000-C语言
- 小马哥----高仿苹果6s 主板型号S106s 更换内核 刷机拆机主板图与开机识别图
- 数据结构之——快速排序
- 欢迎使用CSDN-markdown编辑器
- 在w3school,你可以找到你所需要的所有的网站建设教程。
- CF GYM 100548 Color(2014ACM西安现场赛Problem F)
- 8086指令(II)
- 词法分析器生成工具flex
- java中File类总结
- 云盘暂放
- c++ cin的用法详解 对缓冲区的说明