一些入门级函数

简介


将以下文本粘贴在记事本中,命名为novice.h并放入编译器目录下的include文件夹内即可调用。欢迎补充。

索引


  • 排序(升序)
    • 快速排序
    • 选择排序
    • 插入排序
    • 冒泡排序
  • 打印杨辉三角(需要stdio.h)
  • 十进制转R进制
  • 二分查找(找不到返回-1)
  • 反转字符串(需要string.h)
  • 求最大公约数
  • 待补充

注意事项


  • oj上做题时请不要直接include这个文件,复制其中的函数即可。

代码


#ifndef NOVICE_H_INCLUDED
#define NOVICE_H_INCLUDED
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void quick_sort(int s[], int l, int r) //(s[], 0, n-1) ascending order
{ 
    int i, j, x;
    if (l < r)
    {
        i = l;
        j = r;
        x = s[i];
        while (i < j)
        {
            while(i < j && s[j] > x)
                j--;
            if(i < j)
                s[i++] = s[j];


            while(i < j && s[i] < x)
                i++;
            if(i < j)
                s[j--] = s[i];

        }
        s[i] = x;
        quick_sort(s, l, i-1);
        quick_sort(s, i+1, r);
    }
}

void sel_sort(int *num, int n) //ascending order
{ 
    int i, j, min, tmp;

    for (i = 0;i < n - 1; ++i){
        min = i;

        for (j = i + 1; j < n; ++j)
            if (num[min] > num[j]) min = j;


        if (min != i){
            tmp = num[min];
            num[min] = num[i];
            num[i] = tmp;
        }
    }
}

void ins_sort(int *num, int n) //ascending order
{
    int i, j;
    for (i = 1; i < n; ++i){
        for (j = 0; j < i; ++j)
            if (num[j] > num[i]){
                int tmp = num[i], k;
                for (k = i; k > j; --k) num[k] = num[k - 1];
                num[j] = tmp;
                break;
            }
    }
}

void bubble_sort(int *num, int n) // ascending order
{
    int i, j;
    for (i = n - 1; i > 0; --i){
        for (j = 0; j < i; ++j)
            if (num[j] > num[j + 1]){
                int tmp = num[j];
                num[j] = num[j + 1];
                num[j + 1] = tmp;
            }
    }
}

void tri(int m) //Pascal Triangle
{
    int i,j,a[30][30]={{0}};

    for (i = 0; i < m; i++)
        a[i][0] = 1;

    for (i = 1; i < m; i++)
        for (j = 1; j <= i; j++)
            a[i][j] = a[i-1][j-1] + a[i-1][j];

    for (i = 0; i < m; i++){
        for (j = 0; j <= i; j++){
            if (j == i)
                printf("%d", a[i][j]);
            else
                printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}

void TentoR(int a, int b) //a(base 10) to number(base b)
{
    int cnt,number[20];
    if (a == 0)
        return;
    TentoR(a / b, b);
    number[cnt++] = a % b;
}

int bin_search(int *a, int size, int p) //ascending order
{
    int l = 0, r = size - 1;
    while (l <= r){
        int mid = l + (r - l) / 2;
        if (p == a[mid]) return mid;
        else if (p > a[mid]) l = mid + 1;
        else r = mid - 1;
    }
    return -1;
}

void rev_str(char s[]) //reverse string
{ 
    int c,i,j;
    for (i = 0, j = strlen(s) - 1; i < j; i++, j--){
        c = s [i];
        s[i] = s[j];
        s[j] = c;
    }
}

long gcd(long a, long b) //lcm = a * b / gcd(a, b)
{
    return b == 0 ? a : gcd(b, a % b);
}

#endif // NOVICE_H_INCLUDED
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值