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