0


左神起百算,成机算法魂

文章目录

在这里插入图片描述

百算前言

由于是刷题博文不会写的比知识博文细致的,简单的题我可能只会贴代码,但是一般以我的性格简单的我也会标一标,所以我不会裸代码上去,百算暂时先用左神新手课来入局,后面就是神之战,百家百算。因为百算成机这个栏目是大厂敲门砖那个栏目的高度实现。

不会很细致的标明,因为我想刷多点题

第一算


1.打印一个数的32位格式

image-20220113185816860

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include <iostream>
  3. using namespace std;
  4. void Print32(int num) {
  5. int i = 0;
  6. for (i = 31; i >= 0; i--) {
  7. printf((num & (1 << i)) == 0 ? "0" : "1");
  8. }
  9. cout << endl;
  10. }
  11. int main()
  12. {
  13. //看一下整形最大值
  14. int test = INT_MAX;
  15. //整形最小
  16. int test2 = INT_MIN;
  17. Print32(test);
  18. Print32(test2);
  19. return 0;
  20. }

2.给定一个参数N 返回1!+2!+…+N!

image-20220113194410252

  1. long FactSum(int num) {
  2. int i = 0;
  3. long sum = 0;
  4. long cur = 1;
  5. for (i = 1; i <= num; i++) {
  6. cur *= i;
  7. sum += cur;
  8. }
  9. return sum;
  10. }
  11. int main()
  12. {
  13. cout << FactSum(10) << endl;
  14. return 0;
  15. }

3.选择排序

升级的选择排序

image-20220113210118888

  1. //数组打印
  2. void PrintArray(int* array,int n) {
  3. int i = 0;
  4. for (i = 0; i < n; i++) {
  5. cout << array[i] << " ";
  6. }
  7. cout << endl;
  8. }
  9. //元素交换
  10. void Swap(int* px, int* py) {
  11. int tmp = *px;
  12. *px = *py;
  13. *py = tmp;
  14. }
  15. //选择排序
  16. //为了提高量的效率 我们一趟就把范围内最大最小
  17. //都取出来放到正确的位置上
  18. void SelectSort(int* array, int n) {
  19. //首先考虑边界 空数组或单元素数组就直接返回
  20. if (!n || n == 1)
  21. return;
  22. //不空就继续
  23. //头标
  24. int begin = 0;
  25. //尾标
  26. int end = n - 1;
  27. while (begin < end)
  28. {
  29. //最小元素位置
  30. int MinIndex = begin;
  31. //最大元素位置
  32. int MaxIndex = end;
  33. int i = 0;
  34. for (i = begin; i <= end; i++) {
  35. //找最小
  36. if (array[i] < array[MinIndex])
  37. MinIndex = i;
  38. //找最大
  39. if (array[i] > array[MaxIndex])
  40. MaxIndex = i;
  41. }
  42. //找完再交换
  43. Swap(&array[begin], &array[MinIndex]);
  44. if (begin == MaxIndex)
  45. //如果最大数就是begin位置的,那么交换的时候最大数连带着下标一起动
  46. MaxIndex = MinIndex;
  47. Swap(&array[end], &array[MaxIndex]);
  48. begin++;
  49. end--;
  50. }
  51. }
  52. int main() {
  53. //随便创建一个数组
  54. int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
  55. //打印交换前的
  56. PrintArray(a, sizeof(a) / sizeof(a[0]));
  57. //交换一下
  58. SelectSort(a, sizeof(a) / sizeof(a[0]));
  59. //打印交换后的
  60. PrintArray(a, sizeof(a) / sizeof(a[0]));
  61. return 0;
  62. }

3.冒泡排序

image-20220113220206472

  1. //数组打印
  2. void PrintArray(int* array, int n) {
  3. int i = 0;
  4. for (i = 0; i < n; i++) {
  5. cout << array[i] << " ";
  6. }
  7. cout << endl;
  8. }
  9. //元素交换
  10. void Swap(int* px, int* py) {
  11. int tmp = *px;
  12. *px = *py;
  13. *py = tmp;
  14. }
  15. void BubbleSort(int* array, int n) {
  16. if (!array || n<2)
  17. return;
  18. int i = 0;
  19. for (i = 0; i < n - 1; i++) {
  20. //交换标记
  21. int flag = 0;
  22. int j = 0;
  23. for (j = 0; j < n - 1 - i;j++) {
  24. if (array[j] > array[j + 1]) {
  25. //交换标记置1
  26. flag = 1;
  27. Swap(&array[j],&array[j+1]);
  28. }
  29. }
  30. if (!flag)
  31. break;
  32. }
  33. }
  34. int main() {
  35. //随便创建一个数组
  36. int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
  37. //打印交换前的
  38. PrintArray(a, sizeof(a) / sizeof(a[0]));
  39. //交换一下
  40. BubbleSort(a, sizeof(a) / sizeof(a[0]));
  41. //打印交换后的
  42. PrintArray(a, sizeof(a) / sizeof(a[0]));
  43. return 0;
  44. }

4.插入排序

image-20220113225812876

  1. //数组打印
  2. void PrintArray(int* array, int n) {
  3. int i = 0;
  4. for (i = 0; i < n; i++) {
  5. cout << array[i] << " ";
  6. }
  7. cout << endl;
  8. }
  9. //元素交换
  10. void Swap(int* px, int* py) {
  11. int tmp = *px;
  12. *px = *py;
  13. *py = tmp;
  14. }
  15. //插入排序
  16. void InsertSort(int* array, int n) {
  17. if (!array || n < 2)
  18. return;
  19. //0-0 一个元素是好的
  20. //0-1
  21. //0-2
  22. //0-n 这些范围变,变的就是end
  23. int end = 1;
  24. for (end = 1; end < n; end++) {
  25. //新来的数在end这个位置上面
  26. int cur = end;
  27. //向前跑
  28. while (cur - 1 >= 0 && array[cur - 1] > array[cur]) {
  29. //交换
  30. Swap(&array[cur - 1], &array[cur]);
  31. //向前移
  32. cur--;
  33. }
  34. }
  35. }
  36. int main() {
  37. //随便创建一个数组
  38. int a[] = { 5,8,54,6,5,0,4,55,8,84,4,1 };
  39. //打印交换前的
  40. PrintArray(a, sizeof(a) / sizeof(a[0]));
  41. //交换一下
  42. InsertSort(a, sizeof(a) / sizeof(a[0]));
  43. //打印交换后的
  44. PrintArray(a, sizeof(a) / sizeof(a[0]));
  45. return 0;
  46. }
标签: 算法 排序算法

本文转载自: https://blog.csdn.net/diandengren/article/details/122484834
版权归原作者 小码农UU 所有, 如有侵权,请联系我们删除。

“左神起百算,成机算法魂”的评论:

还没有评论