一、
函数1:请使用冒泡排序实现升序排序
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
函数2:请使用简单选择排序实现升序排序
void selection_sort(int arr[], int n) {
for (int i = 0; i < n; i++) {
int min_index = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
}
函数3:请使用直接插入排序实现升序排序
void insertion_sort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
函数4:请使用插入排序实现升序排序
void shell_sort(int arr[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
二、写了个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
#include <stdio.h>
int DigitSum(int n) {
if (n == 0) {
return 0;
} else {
return n % 10 + DigitSum(n / 10);
}
}
int main() {
int n = 1729;
printf("输入:%d,输出:%d\n", n, DigitSum(n));
return 0;
}
三、写一个宏,可以将一个int型整数的二进制位的奇数位和偶数位交换
#include <stdio.h>
#define SWAP(x) (((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1))
int main() {
int x = 23;
printf("原始数值:%d,交换后的数值:%d\n", x, SWAP(x));
return 0;
}