快速排序法递归实现--C语言
2020-01-15 10:05
1386 查看
以下是快速排序法的递归实现,使用C语言编写:
#include <stdio.h> void Sort(int a[],int p,int r); int partition(int a[],int p,int r); void Swap(int a[],int i,int j); int main() { int n,a[100],p,r; //p为待排序数列的首位元素下标、r为待排序数列的末尾元素下标 printf("请输入数值个数:"); scanf("%d",&n); printf("请输入元素:"); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } p=0; r=n-1; Sort(a,p,r); printf("排序后:"); for(int i=0;i<n;i++) { printf("%d ",a[i]); } return 0; } void Sort(int a[],int p,int r) { if(p<r) { int q=partition(a,p,r); //一次定位一个元素 Sort(a,p,q-1); //已经定位好的元素,前组递归 ,继续下一个元素的定位 Sort(a,q+1,r); // 已经定位好的元素,前组递归 ,继续下一个元素的定位 } } int partition(int a[],int p,int r) { int i=p,j=r+1; //i、j分别从从前、后扫描 int x=a[p]如果帮助到了你,还请点赞鼓励,笔者会再接再厉的!; //x为此次要定位的元素 while(1) { while(a[++i]<a[p]&&i<r);//i从前往后扫,遇到比待定位元素大的元素,或者超出数列长度则停下 while(a[--j]>a[p]); //j从后往前扫,遇到比待定位元素小的元素则停下 if(i>=j) break; Swap(a,i,j); //元素交换 :a[i]与a[j] } a[p]=a[j]; a[j]=x; return j; } void Swap(int a[],int i,int j) { int temp; temp=a[i]; a[i]=a[j]; a[j]=temp; }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- [C语言]编写一个函数实现n^k,使用递归的方法。
- c语言简单递归/非递归实现二分查找
- C语言小程序 递归实现
- C语言实现 递归 数字转换成字符串
- C语言递归和非递归实现字符串反转函数char *reverse(char *str)
- 快速排序c语言递归和栈实现
- C语言:斐波那契契数列的实现,递归 与 非递归
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 【C语言】递归实现元素的全排列和子集
- C语言递归实现二叉链表
- C语言实现 算术表达式转化为二叉树并递归求解(用栈求解后缀表达式)
- C语言:编写reverse_string(char * string)(递归实现)函数,将参数字符串中的字符反向排列
- C语言递归实现字符串翻转
- 斐波那契数(非递归以及递归实现 C语言)
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- AVL平衡树插入非递归实现 C语言
- 归并排序递归实现C语言
- 汉洛塔递归实现的思考(C语言)
- n皇后问题的两种递归方法C语言实现
- 【c语言】编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。