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