- 博客(22)
- 收藏
- 关注
原创 排序算法-----归并排序
排序算法-----归并排序:归并排序的算法思想:主要将两个有序数组比较合成一个数组。这里注意,将原数组用递归的思想不断的划分,直到成为只有一个元素的数组(即递归出口)。不断划分的过程中,具体的步骤:创建两个动态的内存空间用于存放划分成左右的元素,然后,合并过程 中进行比较,合并过程可以看成回溯过程,回溯的数组都是有序数组,然后进行有序数组的比较接着合并,然后不断回溯,也就是不断合并的过程。观察下图,根据上述思想,自行理解。代码如下:#include <stdio.h>#include
2021-02-28 23:40:34 64
原创 选择排序算法-----堆排序
选择排序算法-----堆排序:堆排序的结构思想就是:先构建(例如大顶堆)然后调整。构建堆,在构建过程中,用到3个变量,root,last,child,其中有两步:比较左右孩子大小,然后将大的值与root比较并且(是否)交换位置。另外,构建完成之后,接着循环将最后一个元素与第一个元素交换位置,然后接着从第一个元素开始,进行调整。观察下图,数字原始排列为 5,7,3,2,4,8,11,6,1根据上述思想,自行变化。代码如下:#include <stdio.h>void adjusthea
2021-02-28 19:26:20 104 2
原创 选择排序算法-----简单选择排序算法
选择排序算法-----简单选择排序算法:简单选择排序算法的思想:就是每次循环找出最小的数,并用temp记录最小值以及用index记录最小值的下标;代码如下:#include <stdio.h>void selecksort(int *a, int length) { int i,j,temp,index; for(i = 0; i<length; i++) { //用temp变量记录最小值,index记录最小值的下标 temp = a[i]; inde
2021-02-28 01:59:25 173
原创 交换排序算法-----快速排序
排序算法-----快速排序:快速排序的算法思想:递归的排序,每次将起始下标的数组元素值作为基数,然后先从末尾寻找比基数小的数,接着从起始位置寻找比基数大的数,交换位置之后,在起始下标x++的过程中与末尾下标y–的过程中,x==y的时候,将基数放入其中,接着就是递归的思想.观察下图,根据上述思想,自行移动。元素2拿出了。代码如下:#include <stdio.h>void quicksort(int *a, int start, int end)//参数:数组,起始下标,末尾下标
2021-02-28 01:27:41 121
原创 插入排序算法-----希尔排序
插入排序算法-----希尔排序:希尔排序思想是将数组每次分成不同的数组同时进行排序,划分的方式是设置增量值,即h= length/2, h /=2;与直接排序最大的不同就是比较的数组值下标间隔不同。希尔排序在数据量庞大的时候进行排序效率高,时间短。代码如下:#include <stdio.h>void insertfun(int *a, int length){ int i,j,temp,h;//h表示增量 h = length/2 for(h = length/2; h&g
2021-02-28 00:39:26 105
原创 插入排序算法-----直接排序
排序算法-----直接排序:直接排序:算法思想:将数组的中的每一个的数与它前面的所有数进行比较,找到比它本身小的数,插入进去,比他大的数往后移一位。观察下图,可以根据上面的算法思想自行的进行移动。程序代码如下:#include <stdio.h>void insertfun(int *a, int length){ int i,j,temp; for(i=1; i<length; i++) //这里从数组1开始 { //每i趟比较,i-1个前面的数的大小都是排好
2021-02-27 23:45:33 96 1
原创 求多项式的值以及查看给定程序段内运行的时间
求多项式的值以及查看给定程序段内运行的时间:多项式的基本公式变形可得:另外还要了解clock()函数:宏CLOCKS_PER_SEC适用于将计算系统时间类型转换为用户可读的秒时间。clock_t是long类型,包含在头文件"time.h"中 将long用别名clock_t代替。代码如下:#include<stdio.h>#include <time.h>clock_t start, stop; //clock_t是long类型,包含在头文件"time.h"中 将
2021-02-22 18:23:21 143
原创 fread与fwrite的简单运用
fread与fwrite的简单运用:用fread()与fwrite()将学生信息写到磁盘文件上,接着将磁盘文件上存储的学生信息显示在终端。了解fread(数组地址, 字节长度, 读取次数,文件指针 ):向指针所指的文件中每次读取字节长度数的内容存储在数组中,连续读取指定的读取次数.了解fwrite(数组地址, 字节长度, 写入次数,文件指针 ):将数组中的内容,按照给定的字节数,写入指针所指的文件文本中,连续写入给定的次数。#include <stdio.h>#include <
2021-02-08 13:17:49 250 2
原创 fputs与fgets的简单运用
fputs与fgets的简单运用:从终端输入数据,将数据写入文本中,换行输入,文本内容换行显示,接着将文本内容读取显示在终端上了解fputs():是将一行字符串写入文本中。了解fgets():是读取文本中一行字符串。这里要注意的是换行的问题,由于scanf()函数在函数返回的时候是将换行符留在了缓存区,所以,这里要用strcat()函数将字符串"\n"拼接起来,这样就相当于举个例子:"aaaaa\n"的效果。另外,还要注意就是每打开文件进行操作是,在结束时都因该要关闭文件。#include &l
2021-02-07 20:30:01 491
原创 磁盘文件的读写问题
磁盘文件的读写问题:了解fputc(字符,文本路劲的指针)基本格式:将字符写到磁盘文件中了解fgetc(文本路劲的指针)基本格式,从磁盘文件中读取字符;了解exit()函数,它包含在stdlib.h的头文件中。exit是一个库函数,exit()使程序立即正常终止,如果状态值为0则认为正常推出,如果非零则说明存在执行错误。调用exit()清除和关闭所有打开的文件,写出任何缓冲输出,并且调用所有atexit()登记的程序终止函数。一:将终端输入的数据写到任意指定的文件中:这里要注意一下就是代码中第一
2021-02-07 10:01:30 557
原创 ifdef与ifndef的简单运用
#ifdef与#ifndef的简单运用:#ifdef表示如果宏定义了。#ifndef表示若果没有宏定义。#ifdef 宏替换名程序段#endif#ifndef 宏替换名程序段#endif注意的是,这里的宏定义是不指定数据类型的,所以在想说明返回值为int就必须将其返回值赋值给一个整形变量。 还要注意的是,宏定义参数后面接着的字符串不要用大括号括 起来。#include <stdio.h>#define Ave(a,b) c=((a)+(b))/2;int main(
2021-02-06 15:46:34 627
原创 带参数的宏定义的简单运用
定义一个带参数宏,实现比较两个数的大小定义格式:#define 宏名(参数) 字符串#include <stdio.h>#define MAX(a,b) c=((a)>(b)?(a):(b)); //注意,这里不要用大括号阔起来,否则报错int main(){ int a = 15, b = 7; int c = MAX(a,b); printf("最大数为:%d",c); return 0;}...
2021-02-06 15:22:18 392
转载 算术右移和逻辑右移区别
**一、对于有符号数 int正数,左移直接丢弃最高位,在低位补对应个数的0;正数,右移直接丢弃最低位,在高位补对应个数的0;负数,左移直接丢弃最高位,在低位补对应个数的0;负数,右移直接丢弃最低位,在高位补对应个数的1;二、对于无符号数 unsigned int0左移直接丢弃最高位,在低位补对应个数的0;右移直接丢弃最低位,在高位补对应个数的0即使最高位原来是1;三、总结算术右移:最高位填充符号位。正数填充0,负数填充1逻辑右移:最高位填充0左移都是补0...
2021-02-06 14:50:37 1766
原创 编程实现循环位移
输入一个八进制数,输入要移动的位数,若数为正数,则表示右移,相反为左移,并打印八进制结果:思路:这里无符号整数,为两个字节,即16位,用到的公式在代码中体现出来了。#include <stdio.h>right(unsigned x, int n){ unsigned z; z = (x>>n)|(x<<16-n); return z;}left(unsigned x, int n){ unsigned z; z = (x>>16
2021-02-06 14:44:54 415
原创 用结构体数组存储学生信息,输入学生学号,查询相应的成绩
用结构体数组存储学生信息,输入学生学号,查询相应的成绩主要是熟练一下结构体的运用,思路:先存储学生信息,然后做相应的查询,在存储过程中,设置以#为结束标志,在查找过程中,同样以#为结束标志,这里用到了strcmp(char1, char2),代码如下:#include <stdio.h>#include <string.h>struct info{ char name[12]; char id[9]; char score[10];};int readin(stru
2021-02-05 22:10:25 12668
原创 将两个有序字符串集合排序成一个新的有序集合
将两个有序字符串集合排序成一个新的有序集合:思路:这里采用指针的形式,如果两个指针没有指到’\0’,则通过比较得出先后顺序,另外就是两中情况,分别在下面代码中体现出来了。#include <stdio.h>void fun(char *str1, char *str2){ char *s; char a[60]; s=a; while(*str1!='\0'&&*str2!='\0') { if(*str1>=*str2)
2021-02-05 20:22:48 434
转载 指针与数组的练习
*int find_middle(int a[],int n);当传递长度为n的数组a时,函数将返回指向数组的中间元素的指针。(如果n是偶数,选择较大下标的中间元素。例如,如果n=4,中间元素是a[2],不是a[1]。)#include <stdio.h>#include <stdlib.h>int *fun(int x[], int n){ int *w; w = &x[n/2]; return w;}int main(){ int a[]={1,2
2021-02-05 16:56:50 194
原创 在一段字符串指定位置插入另外一段字符串
在一段字符串指定位置插入另外一段字符串:注意循环结束的条件,以及循环结束之后补上’\0’;#include <stdio.h>#include <string.h>void insert(char *p, char *q, int n){ char *strs, ch[60]; strs = ch; int i; for(i=0; *p!='\0'; i++) { if(i == n-1) { while(*q!='\0
2021-02-04 22:59:57 784
原创 字符串指针的指向区别
字符串指针的指向区别:#include <stdio.h>#include <string.h>int main(){ char st[20],*ps; ps = st; scanf("%s", ps); puts(st); /* ps = "hello"; puts(st); */ return 0; }运行注释里面程序代码的结果截图:注意到结果为空,也就是没有将hello赋值成功给字符数组,前者可以赋值成功是因为ps是指向st数组的首地址,对
2021-02-04 22:30:17 94
原创 指针实现冒泡排序
指针实现冒泡排序:直接看代码#include <stdio.h>int order(int *p, int n){ int t; for(int i=0; i<n-1; i++) for(int j=0; j<n-1-i; j++) if(*(p+j)>*(p+j+1)) { t = *(p+j); *(p+j) = *(p+j+1); *(p+j+1) = t; } for(int i=0; i<n
2021-02-04 22:01:47 1113
原创 输入年月份,输出这天是这年的第几天?
输入年月份,输出这年的第几天?这里可以用数组将每个月的天数存储起来,然后通过循环求解,注意循环物理下标。#include <stdio.h>int fun(int year, int month, int day){ int md[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int sum=0; for(int i=0; i<month-1; i++)//这里要-1 sum = day+ md[i]+sum; if(year%
2021-02-04 21:26:46 1206
原创 交换排序算法-----冒泡排序
C语言之冒泡排序:n个数排序,n-1次趟比较,第j趟比较中,有n-j次比较;#include <stdio.h>int main(){ int ch[]={12,25,34,4,6,9,7}; int t; int length=0; length = sizeof(ch)/sizeof(int); //求数组长度 for(int i=0; i<length; i++) for(int j=0; j<length-i; j++) if(ch[j]&
2021-02-04 17:01:49 73
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人