快速排序算法
来源:互联网 发布:彩票代购源码 编辑:程序博客网 时间:2024/06/05 16:54
快速排序算法
快速排序算法(用递归和非递归的方式实现)
/*假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是: 1)设置两个变量I、J,排序开始的时候 I=0,J=N-1; 2)以第一个数组元素作为关键数据,赋值给X,即X=A[0]; 3)从J开始向前搜索,即由后开始向前搜索,找到第一个小于X的值,两者交换; 4)从I开始向后搜索,即由前开始向后搜索,找到第一个大于X的值,两者交换; 5)重复第3、4步,直到I=J;*/#include <stdio.h>/****** 将快速排序的一趟放在内部(递归方式)*********/void quicksort(int *a, int low, int high){int i=low;int j=high;int key=a[i];if(low<high){while(i<j){while((i<j) && (a[j]>=key)){j--;}a[i]=a[j];while((i<j) && (a[i]<=key)){i++;}a[j]=a[i];}a[i]=key;quicksort(a, low, i-1);quicksort(a, j+1, high);}}/**快速排序的一趟排序**/int quick_once(int *a, int low, int high){int key=a[low];while(low < high){while((low<high) && (a[high]>=key))high--;a[low] = a[high];while((low<high) && (a[low]<=key))low++;a[high] = a[low];}a[low]=key;return low;}/****递归方式***/void quick_sort(int *a, int low, int high){int k;if(low < high){k=quick_once(a, low, high);quick_sort(a, low, k-1);quick_sort(a, k+1, high);}}/*****非递归方式******/void quicksort_not(int *a, int low, int high){int stack[20];int top=0;int k;stack[++top]=low;stack[++top]=high;while(top>0){high=stack[top--];low=stack[top--];k=quick_once(a, low, high);if(low<k-1){stack[++top]=low;stack[++top]=k-1;}if(high>k+1){stack[++top]=k+1;stack[++top]=high;}}}void main(){int i=0; int a[6] = {23,1,21,4,19, 3}; quicksort_not(a, 0, 5); //quick_sort(a, 0, 5); for(i=0;i<6;i++) printf("%d ",a[i]); printf("\n");}
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 96.Unique Binary Search Trees
- Android ActionBar 自定义布局
- 类基础
- 【POJ 1905】 Expanding Rods (二分)
- vc中调用Com组件的方法详解
- 快速排序算法
- 黑马程序员——Java工具类概述
- 欢迎使用CSDN-markdown编辑器
- 【ugui的坑】实现可拖拽的Sprite
- MySQL事务处理介绍
- php中的转义字符
- MySQL备份数据库
- MongoDB的索引(三)
- android SIM state