您的位置:首页 > 其它

一些入门级函数

2017-11-08 12:10 60 查看

简介

将以下文本粘贴在记事本中,命名为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息