0


左神起百算,成机算法魂

文章目录

在这里插入图片描述

百算前言

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

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

第一算


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

image-20220113185816860

#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!

image-20220113194410252

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.选择排序

升级的选择排序

image-20220113210118888

//数组打印
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.冒泡排序

image-20220113220206472

//数组打印
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.插入排序

image-20220113225812876


//数组打印
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 所有, 如有侵权,请联系我们删除。

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

还没有评论