4-11-初学排序与查找
来源:互联网 发布:硬盘mac不能写入文件 编辑:程序博客网 时间:2024/06/03 21:40
学习4-11期视频笔记
1、数组
#include<stdio.h>#include<stdlib.h>#definenum 4 //常量//constint num=4; vc这个就不可以,这是伪常量//vc必须静态分配,gcc里面都可以void main(){ double a[num] = { 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};//默认没有初始化的,会填充为0 printf("\n%d", sizeof(a));//数组的大小,即8(每个元素的大小)*10(元素个数) for (int i = 0; i < 10; i++) { printf("\n%f,%f,%f",a[i], *(&a[i]), *(a + i));//都是表示数组第i个元素 printf("%p,%p",&a[i], a + i);//都是表示数组第i个元素的地址 } system("pause");}
数组不能批量操作(比如不能整体性输出,printf(“%d”,a)),字符串除外
数组不能加减运算(a+b)
数组越界不一定出错,不越界一定不会出错。
2、冒泡排序
inta[n];冒泡排序,寻找最小数 for (int i = 0; i < n-1; i++) { min = i; for (int j = i+1; j < n-1; j++) { if (a[j] < a[min]) min = j; } if (min != i) { temp = a[i]; a[i] = a[min]; a[min] = temp; } }//计算了n*(n-1)/2时间复杂度为O(n²) 冒泡排序,交换数值 for (int i = 0; i < n-1; i++)//n-1次 { for (int j = 0; j < n - 1 - i;j++) { if (a[j] < a[j+ 1])//对比 { temp = a[j];//交换 a[j] = a[j + 1]; a[j + 1] = temp; } } }
3、二分法查找
voidsearch(int a[N], int num){ int tou = 0; int wei = N - 1; int zhong; int flag = -1; while (tou <= wei) { zhong = (tou + wei) / 2; if (num == a[zhong]) { printf("找到,a[%d]=%d",zhong, num); flag = 1; break; } else if (num > a[zhong]) { tou = zhong + 1; } else { wei = zhong - 1; } } if (flag == -1) { printf("没有找到"); }}
4、插值查找
voidsearch(int a[N], int num){ int tou = 0; int wei = N - 1; int zhong; int flag = -1; while (tou <= wei) { //zhong = (tou + wei) / 2; //zhong = tou + (wei - tou) / 2;//递增数列 zhong = tou + (wei - tou)*1.0*(num- a[tou]) / (a[wei] - a[tou]); if (num == a[zhong]) { printf("找到,a[%d]=%d",zhong, num); flag = 1; break; } else if (num > a[zhong]) { tou = zhong + 1; } else { wei = zhong - 1; } } if (flag == -1) { printf("没有找到"); }}
5、插入排序
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h> voidmain(){ int a[10] = { 1,5,2,4,3,8,7,9,10,6 }; for (int i = 1; i < 10; i++) { int temp = a[i]; int j = i; while (j > 0 && a[j -1] > temp) { a[j] = a[j - 1]; j--; } a[j] = temp; for (int i = 0; i < 10; i++) { printf("%d",a[i]); } printf("\n"); } system("pause");}
6、大数据实战-硬盘查找开放数据
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h> charstrpath[256] = "E:\\c\\大数据相关数据\\kaifang.txt";//路径charsavepath[256] = { 0 }; voidshowlist(char str[256]){ sprintf(savepath, "E:\\%s.txt",str); FILE *pf;//文件指针 pf = fopen(strpath, "r");//读取 FILE *pfw = fopen(savepath,"w"); if (pf == NULL|| pfw == NULL) { printf("文件打开失败"); } else { //feof(pf)到了文件末尾就返回1,否则返回0 while (!feof(pf))//没有到文件末尾就继续 { char readstr[1024] = { 0 }; fgets(readstr, 1024, pf);//读取一行 char *p =strstr(readstr,str);//字符串查找 if (p != NULL) { puts(readstr);//打印 fputs(readstr,pfw);//写入 } } fclose(pf); fclose(pfw); }}voidmain(){ char str[256] = { 0 }; scanf("%s", str); printf("你要查询的是%s\n", str); time_t start ,end; time(&start); showlist(str); time(&end); printf("花了%f秒", difftime(end, start)); system(savepath); system("pause");}
7、二维数组
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h> voidmain(){ //未完全初始化的元素,默认为0 //int b[5][5] = {1,2,3,4,5}//前5个数据有数值,后面为0 //int a[5][5]={{1,2,3,4,5},{1,2}}//第一二行部分数据设定,其余为0 //行坐标可以省略a[][3]={{1,2,3},{4,5,6}}; //纵坐标不可以省略a[3][]; //二维数组元素在内存中按行存放,第一行首地址位a[0],第二行a[1]... &a[i][j]=a[i]+j int a[5][5] = { {1,2,3,4,5,6},{1,2,3} }; printf("%d\n", sizeof(a)); printf("%p", &a); int num = 1; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { printf("%4d",a[i][j]);//查看可以发现,在内存中以1,2,3...25顺序排列,且相邻数据内存位置差4 } printf("\n"); } system("pause");}
0 0
- 4-11-初学排序与查找
- 哈工大数据结构实验4 查找与排序
- 高级算法日记4:查找与排序
- 查找与排序代码
- 二分法查找与排序
- 排序与查找
- 快速排序与查找
- 查找与排序
- CC_11_排序与查找
- 查找与排序小结
- 数据结构:查找与排序
- Java--排序与查找
- 排序与查找
- 查找与排序
- Java排序与查找
- 数组排序与查找
- 排序与查找
- 数组排序与查找
- MySQL 列类型-字符串型
- hadoop-hive本地和伪分布式模式的安装
- Android中的MVC和MVP对比
- Java编程基本功训练题(1~10)
- 前端工程师的前后端交互指南
- 4-11-初学排序与查找
- 获取字符串中字母出现的次数
- 比特波特关系
- dnw2配置
- Logistic回归原理【似然函数与梯度选择】
- 使用sklearn做单机特征工程
- 自定义ListView的高度
- 在CSDN博客上编辑数学公式
- The Triangle