赞
踩
1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序)
程序代码:
- 1 #include<stdio.h>
- 2 #include<string.h>
- 3 #include<stdlib.h>
- 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;i<len;i++)
- 30 {
- 31 for(int j=0;j<len-i;j++)
- 32 {
- 33 if(arr[j]>arr[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;i<len;i++)
- 46 {
- 47 printf("%-4d",arr[i]);
- 48 }
- 49 puts("");
- 50 }
- 51 //简单选择排序升序
- 52 void simple_sort(int arr[],int len)
- 53 {
- 54 for(int i=0;i<len-1;i++)
- 55 {
- 56 int min=i;
- 57 for(int j=i+1;j<len;j++)
- 58 {
- 59 if(arr[min]>arr[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<len;i++)
- 75 {
- 76 int j;
- 77 int temp=arr[i];//后移,保存第一个插入元素(arr[1])
- 78 for(j=i-1;j>=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<high)//low==high结束
- 90 {
- 91 while(low<high&&key<=arr[high])//倒叙比较
- 92 high--;
- 93 arr[low]=arr[high];
- 94 while(low<high&&key>=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<stdio.h>
- 2 #include<string.h>
- 3 #include<stdlib.h>
- 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<stdio.h>
- 2 #include<string.h>
- 3 #include<stdlib.h>
- 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 }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。