C语言(24)

1.插入和快速排序

  1 #include<stdio.h>
  2 #include<time.h>
  3 #include<stdlib.h>
  4 
  5 
  6 /*
  7         编译过程:
  8         一.预处理
  9                 1.头文件展开 2.去注释  3.宏替换  4.条件编译
 10                 gcc -E xxx.c -o xxx.i
 11                 
 12         二.编译
 13                 将预处理的文件生成汇编代码
 14                 gcc -S xxx.c -o xxx.s
 15         三.汇编
 16                 生成二进制文件
 17                 gcc -c xxx.c -o xxx.o
 18         四.链接
 19                 生成可执行程序
 20 */
 21 
 22 
 23 
 24 //升序
 25 void input(int *p,int len);
 26 void output(int *p,int len);
 27 void insert_sort(int *p,int len);
 28 void quick_sort(int *start,int *end);
 29 int main(void)
 30 {
 31         int array[10] = {};
 32         input(array,sizeof(array)/sizeof(array[0]));
 33         output(array,10);
 34 
 35 //      insert_sort(array,10);
 36         quick_sort(array,array+9);
 37         output(array,10);
 38  
 39         return 0;
 40 }
 41 
 41 
 42 void input(int *p,int len)
 43 {
 44         int i = 0 ;
 45         if(NULL == p){
 46         //      priintf("p is null\n");
 47                 fprintf(stderr,"p is null\n");
 48 //              perror()//stdin,stdout,stderr;
 49                 return ;
 50         }
 51         srand(time(NULL));
 52         for(;i<len;i++){
 53                 *(p+i) = rand()%100;
 54         }
 55 }
 56 
 57 void output(int *p,int len)
 58 {
 59         int *q = p;
 60         if(NULL == p){
 61                 fprintf(stderr,"p is null\n");
 62                 return ;
 63         }
 64         while(q < p+len){
 65                 printf("%d ",*q++);
 66         }
 67         putchar('\n');
 68 }
 69 
 69 
 70 void insert_sort(int *p,int len)
 71 {
 72         int i,j,key = 0;
 73         if(NULL == p){
 74                 fprintf(stderr,"p is null\n");
 75                 return ;
 76         }
 77 
 78         for(i = 1;i < len;i++){
 79                 for(j = i,key = *(p+i); j > 0 && key < *(p+j-1);j--){
 80                         *(p+j) = *(p+j-1);
 81                 }
 82                 *(p+j) = key;
 83         }
 84 }
 85 
 87 void quick_sort(int *start,int *end)
 88 {
 89         int *l = start,*r = end;
 90         int key = 0;
 91         if(NULL == start || NULL == end){
 92         fprintf(stderr,"start or end is null in file:%s lien:%d func:%s",__FILE__,__LINE__,__func_    _);
 93         return ;
 94         }
 95         if(start >= end){
 96                 return ;
 97         }
 98         key = *l;
 99         while(l != r){
100                 while(r != l && key < *r)
101                         r--;
102                 *l = *r;
103                 while(l != r && key >= *l)
104                         l++;
105                 *r = *l;
106         }
107         *l = key;
108         quick_sort(start,l-1);
109         quick_sort(l+1,end);
110 }
111 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值