1. 冒泡排序
冒泡排序的思想:
两两相邻的元素进行比较,如果有可能的话需要交换。一趟冒泡排序能搞定一个数字,让当前待排序的数组中一个元素来到最终应该出现的位置上
目的:
将一系列数字按照一定规律排序,如从小到大排列:
#include<stdio.h> void bubble_sort(int arr[],int sz) { int i = 0; for (i = 0; i < sz - 1; i++) //确定趟数 { int j = 0; for (j = 0; j < sz - 1 - i; j++) //一趟冒泡排序的过程 { int tmp = 0; if (arr[j] > arr[j + 1]) { //交换 tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { int arr[] = { 3,1,5,2,4,9,0,7,6,8 }; //设计一个函数对arr数组进行冒泡排序--冒泡排序的算法 int sz = sizeof(arr) / sizeof(arr[0]); //数组传参 bubble_sort(arr,sz); int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
将乱序数字3,1,5,2,4,9,0,7,6,8重新按照从小到大排列效果如下:
2. 创建一个整形数组,完成对数组的操作
目的:
- 实现函数init() 初始化数组为全0
- 实现print() 打印数组的每个元素
- 实现reverse() 函数完成数组元素的逆置。
要求:自己设计以上函数的参数,返回值。
#include<stdio.h> void init(int arr[],int sz) { int i = 0; for (i = 0; i < 10; i++) { arr[i] = 0; } } void print(int arr[], int sz) { int i = 0; for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } } void reverse(int arr[], int sz) { int left = 0; int right = sz - 1; while (left < right) { int tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); print(arr, sz); printf("\n"); //init(arr, sz); //print(arr, sz); reverse(arr, sz); print(arr, sz); return 0; }
3. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include<stdio.h> #include<string.h> void print(int arr1[],int sz) { int m = 0; for (m = 0; m < sz; m++) { printf("%d ", arr1[m]); } } int main() { int arr1[5] = { 1,3,5,7,9 }; int arr2[5] = { 2,4,6,8,10 }; int i = 0; int sz = sizeof(arr1) / sizeof(arr1[0]); for (i = 0; i < 5; i++) { int tmp = arr1[i]; arr1[i] = arr2[i]; arr2[i] = tmp; } print(arr1, sz); return 0; }
4. 求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299
输出例子:7
代码如下:
#include<stdio.h> int main() { int m = 0; int n = 0; int tmp = 0; int count = 0; scanf("%d %d", &m, &n); tmp = m ^ n; while (tmp != 0) { count++; tmp = tmp & (tmp - 1); } printf("%d\n", count); return 0; }
5. 打印整数二进制的奇数位和偶数位
#include<stdio.h> void Printbit(int num) { for (int i = 31; i >= 1; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); for (int i = 30; i >= 0; i -= 2) { printf("%d ", (num >> i) & 1); } printf("\n"); } int main() { int num = 0; scanf("%d", &num); Printbit(num); return 0; }
6. 统计二进制1的个数
比如: 15 0000 1111 4 个 1
1.
#include<stdio.h> int count_one_bit(int n) { int count = 0; while (n) { if (n % 2 == 1) count++; n = n / 2; } printf("%d\n", count); return count; } int main() { int count = 0; int n = 0; scanf("%d", &n); count_one_bit(n); return 0; }
7. 交换两个变量(不创建临时变量)
此题在之前的博客中有讲到,当时讲了4种方法,这是其中一种。
#include<stdio.h> int main() { int a = 3; int b = 5; a = a ^ b; b = a ^ b; //即为 a ^ b ^ b = a ^ 0 = a a = a ^ b; //即为 a ^ a ^ b = 0 ^ b = b printf("a=%d b=%d", a, b); // a=5 b=3 }