1.现有无序序列数组为{23,24,12,5,33,5,34,7},请使用以下排序实现编程
函数1:请使用冒泡排序实现升序排序
函数2:请使用简单选择排序实现升序排序
函数3:请使用直接插入排序实现升序排序
函数4:请使用插入排序实现升序排序
#include
#include
void bubble_sort(int a[], int n)
{
for (int i = n; i > 1; i--)
{
for (int j = 0; j < i; j++)
{
if (a[j] > a[j + 1])
{
a[j] += a[j + 1];
a[j + 1] = a[j] - a[j + 1];
a[j] -= a[j + 1];
}
}
}
printf("冒泡排序:");
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
puts("");
}
void selection_sort(int a[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i; j < n; j++)
{
if (a[i] > a[j])
{
a[i] += a[j];
a[j] = a[i] - a[j];
a[i] -= a[j];
}
}
}
printf("选择排序:");
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
puts("");
}
void insert_sort(int a[], int n)
{
for (int i = 1; i < n; i++)
{
if (a[i] < a[i - 1])
{
int t = a[i];
int j = i - 1;
for (; j >= 0 && a[j] > t; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
}
}
printf("直接插入排序:");
for (int i = 0; i < n; i++)
{
printf("%4d", a[i]);
}
puts("");
}
void quick_sort(int a[], int l, int r)
{
if (l < r)
{
int i = l, j = r, n = a[l];
while (i < j)
{
while (i < j && a[j] >= n)
{
j--;
}
if (i < j)
{
a[i++] = a[j];
}
while (i < j && a[i] < n)
{
i++;
}
if (i < j)
{
a[j--] = a[i];
}
}
a[i] = n;
quick_sort(a, l, i - 1);
quick_sort(a, i + 1, r);
}
}
int main()
{
int a[] = {23,24,12,5,33,5,34,7};
int b[] = {23,24,12,5,33,5,34,7};
int c[] = {23,24,12,5,33,5,34,7};
int d[] = {23,24,12,5,33,5,34,7};
int len = sizeof(a) / sizeof(a[0]);
bubble_sort(a, len);
selection_sort(b, len);
insert_sort(c, len);
quick_sort(d, 0, len - 1);
printf("快速排序:");
for (int i = 0; i < len; i++)
{
printf("%4d", d[i]);
}
puts("");
return 0;
}
2.写了个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如:调用DigitSum(1729),则返回1+7+2+9,它的和是19,输入1729,输出19
#include
#include
int DigitSum(int n)
{
if (0 == n)
{
return 0;
}
return (n % 10) + DigitSum(n / 10);
}
int main()
{
int n;
printf("请输入数字:");
scanf("%d", &n);
printf("位数之和:%d\n", DigitSum(n));
return 0;
}
3.写一个宏,可以将一个int型整数的二进制位的奇数位和偶数位交换
#include
#include
#define swap(num) (((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))
int main()
{
int a = 10;
printf("%d\n", swap(a));
return 0;
}