文章目录
百算前言
由于是刷题博文不会写的比知识博文细致的,简单的题我可能只会贴代码,但是一般以我的性格简单的我也会标一标,所以我不会裸代码上去,百算暂时先用左神新手课来入局,后面就是神之战,百家百算。因为百算成机这个栏目是大厂敲门砖那个栏目的高度实现。
不会很细致的标明,因为我想刷多点题
第一算
1.打印一个数的32位格式
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
void Print32(int num) {
int i = 0;
for (i = 31; i >= 0; i--) {
printf((num & (1 << i)) == 0 ? "0" : "1");
}
cout << endl;
}
int main()
{
//看一下整形最大值
int test = INT_MAX;
//整形最小
int test2 = INT_MIN;
Print32(test);
Print32(test2);
return 0;
}
2.给定一个参数N 返回1!+2!+…+N!
long FactSum(int num) {
int i = 0;
long sum = 0;
long cur = 1;
for (i = 1; i <= num; i++) {
cur *= i;
sum += cur;
}
return sum;
}
int main()
{
cout << FactSum(10) << endl;
return 0;
}
3.选择排序
升级的选择排序
//数组打印
void PrintArray(int* array,int n) {
int i = 0;
for (i = 0; i < n; i++) {
cout << array[i] << " ";
}
cout << endl;
}
//元素交换
void Swap(int* px, int* py) {
int tmp = *px;
*px = *py;
*py = tmp;
}
//选择排序
//为了提高量的效率 我们一趟就把范围内最大最小
//都取出来放到正确的位置上
void SelectSort(int* array, int n) {
//首先考虑边界 空数组或单元素数组就直接返回
if (!n || n == 1)
return;
//不空就继续
//头标
int begin = 0;
//尾标
int end = n - 1;
while (begin < end)
{
//最小元素位置
int MinIndex = begin;
//最大元素位置
int MaxIndex = end;
int i = 0;
for (i = begin; i <= end; i++) {
//找最小
if (array[i] < array[MinIndex])
MinIndex = i;
//找最大
if (array[i] > array[MaxIndex])
MaxIndex = i;
}
//找完再交换
Swap(&array[begin], &array[MinIndex]);
if (begin == MaxIndex)
//如果最大数就是begin位置的,那么交换的时候最大数连带着下标一起动
MaxIndex = MinIndex;
Swap(&array[end], &array[MaxIndex]);
begin++;
end--;
}
}
int main() {
//随便创建一个数组
int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
//打印交换前的
PrintArray(a, sizeof(a) / sizeof(a[0]));
//交换一下
SelectSort(a, sizeof(a) / sizeof(a[0]));
//打印交换后的
PrintArray(a, sizeof(a) / sizeof(a[0]));
return 0;
}
3.冒泡排序
//数组打印
void PrintArray(int* array, int n) {
int i = 0;
for (i = 0; i < n; i++) {
cout << array[i] << " ";
}
cout << endl;
}
//元素交换
void Swap(int* px, int* py) {
int tmp = *px;
*px = *py;
*py = tmp;
}
void BubbleSort(int* array, int n) {
if (!array || n<2)
return;
int i = 0;
for (i = 0; i < n - 1; i++) {
//交换标记
int flag = 0;
int j = 0;
for (j = 0; j < n - 1 - i;j++) {
if (array[j] > array[j + 1]) {
//交换标记置1
flag = 1;
Swap(&array[j],&array[j+1]);
}
}
if (!flag)
break;
}
}
int main() {
//随便创建一个数组
int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
//打印交换前的
PrintArray(a, sizeof(a) / sizeof(a[0]));
//交换一下
BubbleSort(a, sizeof(a) / sizeof(a[0]));
//打印交换后的
PrintArray(a, sizeof(a) / sizeof(a[0]));
return 0;
}
4.插入排序
//数组打印
void PrintArray(int* array, int n) {
int i = 0;
for (i = 0; i < n; i++) {
cout << array[i] << " ";
}
cout << endl;
}
//元素交换
void Swap(int* px, int* py) {
int tmp = *px;
*px = *py;
*py = tmp;
}
//插入排序
void InsertSort(int* array, int n) {
if (!array || n < 2)
return;
//0-0 一个元素是好的
//0-1
//0-2
//0-n 这些范围变,变的就是end
int end = 1;
for (end = 1; end < n; end++) {
//新来的数在end这个位置上面
int cur = end;
//向前跑
while (cur - 1 >= 0 && array[cur - 1] > array[cur]) {
//交换
Swap(&array[cur - 1], &array[cur]);
//向前移
cur--;
}
}
}
int main() {
//随便创建一个数组
int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
//打印交换前的
PrintArray(a, sizeof(a) / sizeof(a[0]));
//交换一下
InsertSort(a, sizeof(a) / sizeof(a[0]));
//打印交换后的
PrintArray(a, sizeof(a) / sizeof(a[0]));
return 0;
}
本文转载自: https://blog.csdn.net/diandengren/article/details/122484834
版权归原作者 小码农UU 所有, 如有侵权,请联系我们删除。
版权归原作者 小码农UU 所有, 如有侵权,请联系我们删除。