1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序)
程序代码:
1 #include
2 #include
3 #include
4 void Bubble(int arr[],int len);
5 void simple_sort(int arr[],int len);
6 void insert_sort(int arr[],int len);
7 int one_sort(int arr[],int low,int high);
8 void output(int arr[],int len);
9 void quick_sort(int arr[],int low,int high);
10 int main(int argc, const char *argv[])
11 {
12 int arr[]={23,24,12,5,33,5,34,7};
13 int len=sizeof(arr)/sizeof(arr[0]);
14 /* //冒泡排序升序
15 Bubble(arr,len);
16 //简单选择排序升序
17 simple_sort(arr,len);
18 //直接插入排序升序
19 insert_sort(arr,len);*/
20 //快速排序
21 quick_sort(arr,0,len-1);
22 //输出
23 output(arr,len);
24 return 0;
25 }
26 //冒泡排序升序
27 void Bubble(int arr[],int len)
28 {
29 for(int i=1;iarr[j+1])
34 {
35 int t=arr[j];
36 arr[j]=arr[j+1];
37 arr[j+1]=t;
38 }
39 }
40 }
41 }
42 //输出
43 void output(int arr[],int len)
44 {
45 for(int i=0;iarr[j])
60 min=j;
61 }
62 if(i!=min)
63 {
64 int t=arr[i];
65 arr[i]=arr[min];
66 arr[min]=t;
67 }
68 }
69 }
70 //直接插入排序升序
71 void insert_sort(int arr[],int len)
72 {
73 //有序序列:第一个 无序序列:剩余元素
74 for(int i=1;i=0&&arr[j]>temp;j--)//依次和有序序列倒叙比较后移
79 arr[j+1]=arr[j];
80 arr[j+1]=temp;
81 }
82 }
83 //快速排序(基于有序数列)
84 //一次排序
85 //返回基准值下标(中间值下标)
86 int one_sort(int arr[],int low,int high)
87 {
88 int key=arr[low];
89 while(low=arr[low])//正序比较
95 low++;
96 arr[high]=arr[low];
97 }
98 arr[low]=key;
99 return low;
100 }
101 //快排
102 void quick_sort(int arr[],int low,int high)
103 {
104 //判空判一
105 if(low>=high)
106 return;
107 //一次排序
108 int mid=one_sort(arr,low,high);
109 //递归左子序列
110 quick_sort(arr,low,mid-1);
111 //递归右子序列
112 quick_sort(arr,mid+1,high);
113 }
运行结果:
2.递归函数计算非负整数各个位之和
程序代码:
1 #include
2 #include
3 #include
4 int DigitSum(int n);
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 if(n<0)
11 printf("num error\n");
12 else
13 {
14 int sum=DigitSum(n);
15 printf("%d\n",sum);
16 }
17 return 0;
18 }
19 int DigitSum(int n)
20 {
21 if(n==0)
22 return 0;
23 else
24 return n%10+DigitSum(n/10);
25 }
运行结果:
3.写一个宏,实现int型整数的二进制位的奇数位和偶数位交换
程序代码:
1 #include
2 #include
3 #include
4 #define SWAP(n) (((n & 0xaaaaaaaa) >> 1) | ((n & 0x5
5 int main(int argc, const char *argv[])
6 {
7 int n;
8 printf("please enter n:");
9 scanf("%d",&n);
10 int ret=SWAP(n);
11 printf("ret=%d\n",ret);
12 //5:0101奇数位为1
13 //a:1010偶数位为1
14 //一个整数32位,十六进制:0x55555555,0xaaaaaaaa
15 //&:按位与全1为1,其余为0
16 //0x55555555 & n :保留奇数位
17 //0xaaaaaaaa & n :保留偶数位
18 //再位运算,奇数位左移1(<<)奇变偶
19 // 偶数位右移1 (>>) 偶变奇
20 //再按位或|,有1为1,全0为0,合并一起
21
22 return 0;
23 }
运行结果: