快速排序
来源:互联网 发布:电脑美工都学什么 编辑:程序博客网 时间:2024/04/28 08:19
用C语言实现快速排序,用递归和非递归两种方法。
递归方法:
#include<stdio.h>#include<stdlib.h>int main(){ void quicksort(int min,int max,int *a); int i,n,*a; printf("input number:\n"); scanf("%d",&n); a=(int *)malloc(n*sizeof(int)); printf("input member:\n"); for(i=0;i<n;i++) scanf("%d",&a[i]); quicksort(0,n-1,a); for(i=0;i<n;i++) printf("%d ",a[i]); return 0;}void quicksort(int min,int max,int *a){ int i,j,k; int temp=a[min]; i=min; j=max; if(i>j) return ; while(i!=j) { while(a[j]>=temp&&i<j) j--; while(a[i]<=temp&&i<j) i++; if(i<j) { k=a[i]; a[i]=a[j]; a[j]=k; } } a[min]=a[i]; a[i]=temp; quicksort(min,i-1,a); quicksort(i+1,max,a);}非递归方法:
#include<stdio.h>#include<stdlib.h>struct node{ int min; int max;};void fun(int min,int max,int a[]){ int key = a[min]; int i = min; int j = max; int temp; struct node Stack[100]; int top = 0; Stack[top].min = min; Stack[top].max = max; while(top>-1) { i = min = Stack[top].min; j = max = Stack[top].max; top--; key = a[min]; while(i<j) { while((i<j) && (key <= a[j])) j--; if(i < j) { temp = a[i];a[i] = a[j];a[j] = temp; i++; } while((i<j) && (key >= a[i])) i++; if(i < j) { temp = a[i];a[i] = a[j];a[j] = temp; j--; } } if(min < i-1) { top++; Stack[top].min = min; Stack[top].max = i-1; } if(max>i+1) { top++; Stack[top].min = i+1; Stack[top].max = max; } }}int main(){ int i; int a[10] = {49,38,65,97,76,13,27,9,2,1}; for(i=0;i<10;i++) printf(" %d ",a[i]); printf("\n"); fun(0,9,a); for(i=0;i<10;i++) printf(" %d ",a[i]); printf("\n"); return 0;}谢谢来访,有问题可以和我联系 QQ:2201774151
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 1021. 个位数统计 (15) PAT 乙级
- 怎么用dos的cmd命令行查看网络连接打开的端口及服务
- Android富文本编辑器总结(三)
- R语言的基本操作
- Python 文本挖掘:使用gensim进行文本相似度计算
- 快速排序
- StringBuffer
- cheap baseball jersey Major league
- LNMP添加、删除虚拟主机及伪静态使用教程
- Oracle递归查询:使用prior实现树操作
- c运行库、c标准库、windows API的区别和联系
- 1031. 查验身份证(15) PAT 乙级
- 重建二叉树
- LNMP安装了哪些软件?安装目录在哪?