目录
3. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
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
#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
}