从小到大的选取排序 是从一个数组中逐条选出 最小数值 输出,第1小的数值输出,第贰小的数值输出…
…直到最终一个数组中最后1个数遍历实现,则 整个排序输出完结。

01奇数求和演习

  • A: 奇数求和演习

    • a: 标题分析

      • 为了记录累加和的值,大家供给定义二个仓库储存累加和的变量
      • 我们要博获得一-100限制内的数
      • 判定当前数是或不是为奇数,是奇数,实现拉长和操作
      • 添加达成后,最后展现下累加和的值
    • b: 解题步骤

      • 概念一个用来记录累加和的变量
      • 选取for循环语句,Markdown Preview Enhanced: Toggle Scroll
        Sync达成1-拾0时期每种数的获取
      • 运用if条件语句,判断当前数是还是不是是奇数,是奇数,进行添加和操作
      • 使用输出语句,打字与印刷累加和变量的值
    • c: 案例代码

        public class Test01 {
            public static void main(String[] args) {
                int sum = 0;
                for (int i = 0; i < 100; i++) {
                    if (i%2==1) {
                        sum += i;
                    }
                }
                System.out.println("累加和的值 " + sum);
            }
        }
    

 

选料法排序指每回接纳所要排序的数组中的最大值(由小到大排序则选择最小值)的数组成分,将以此数组成分的值与最前头未有开始展览排序的数组成分的值调换。以数字九、陆、一五、4、二为例,采纳选取法贯彻数字按从小到大进展排序,每趟交流的11如图八.一七所示。

 金沙注册送58 1

图8.一柒 
选取法排序示意图

从图8.壹7能够窥见,在首先次排序进度旅长第多个数字和微小的数字举办了职责交流;而第三遍排序进度中,将第壹个数字和剩余的数字中幽微的数字实行了职责沟通;依此类推,每便都将下八个数字和剩下的数字中细小的数字举办岗位交换,直到将1组数字按从小到大排序。

上面通超过实际例来看一下哪些通进程序行使接纳法贯彻数组成分从小到大的排序。 

注:代码通过TDM-GCC肆.玖.二编写翻译通过

 int[] sort = new int[13] { 1, 4, 89, 34, 56, 40, 59, 60, 39, 1, 40, 90, 48 };  // 输入一个数组
            for (int i = 0; i < sort.Length; i++)
            {
                int min = sort[i];  // 初始化(以第i个数为初始值)最小值
                for (int j = i+1; j < sort.Length; j++)   // 从第i+1个开始遍历数组,与第i个数对比,找到最小值
                {
                    if (sort[j] < min)
                    {
                        int temp = sort[j];
                        sort[j] = min;
                        min = temp;
                    }     // 找到最小值赋值给min
                }
                Console.Write(min + " ");  // 输出min 值
            }

0二天葱演习作用达成

  • A: 金盏银台演习作用达成

    • a: 标题分析

      • 旗帜明显怎样的数就是雅蒜数。金盏银台数是指一个三位数(十0-99九里面),其每位数字立方之和相当该2个人数自身。
        如153 = 111 + 333 + 55五,即 肆位数本身 = 百位数立方 +
        十一人数立方 + 个位数立方;
      • 取得天葱范围内的具备三位数(十0-99九之内的种种3个人数)
      • 看清该二位数是不是满足天葱数,满意,打字与印刷该四人数
    • b: 解题步骤

      • 应用for循环,得到100-99九中间的各样三位数
      • 获得二位数中国百货公司位数字、十个人数字、个位数字
      • 使用if条件语句,判断该三人数是不是满足姚女子花剑数,满意,使用输出语句,打字与印刷该肆人数
    • c: 案例代码

       public class Test02 {
           public static void main(String[] args) {
               for (int i = 100; i < 1000; i++) {
                   int bai = i/100%10;
                   int shi = i/10%10;
                   int ge = i%10;
                   if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
                       System.out.println(i);
                   }
               }
           }
       }           
    
实例 利用选用排序将学生成绩实行排序

在本实例中,声明了1个整型数组和八个整型变量,在那之中整型数组用于存款和储蓄用户输入的数字,而整型变量用于存款和储蓄数值最小的数组成分的数值和该因素的地点,然后经过双层循环进行抉择法排序,最终将排好序的数组举办输出。具体代码如下:

01   #include<stdio.h>/*包含头文件*/

02  int main()                   /*主函数main*/

03  {

04           int i,j;                             /*定义变量*/

05           int a[10];

06           int iTemp;

07           int iPos;

08           printf("为数组元素赋值:\n");

09           /*从键盘为数组元素赋值(成绩)*/

10           for(i=0;i<10;i++)

11           {

12                  printf("a[%d]=",i);

13                  scanf("%d", &a[i]); 

14           }

15           /*从高到低排序*/

16           for(i=0;i<9;i++)                                 /*设置外层循环为下标0~8的元素*/

17           {

18                  iTemp = a[i];                       /*设置当前元素为最大值*/

19                  iPos = i;                              /*记录元素位置*/

20                  for(j=i+1;j<10;j++)                     /*内层循环i+1到9*/

21                  {

22                         if(a[j]>iTemp)                      /*如果当前元素比最高值还高*/

23                         {

24                                iTemp = a[j];          /*重新设置最高值*/

25                                iPos = j;                /*记录元素位置*/

26                         }

27                  }

28                  /*交换两个元素值*/

29                  a[iPos] = a[i];

30                  a[i] = iTemp;

31           }

32   

33           /*输出数组*/

34           for(i=0;i<10;i++)

35           {

36                  printf("%d\t",a[i]);                /*输出制表位*/

37                  if(i == 4)                             /*如果是第5个元素*/

38                         printf("\n");            /*输出换行*/

39           }

40   

41           return 0;                                     /*程序结束*/

42  }

 

运作程序,显示结果如图八.1八所示。

 金沙注册送58 2

图8.1八 
选取排序运转图

从该实例代码和运转结果能够见到:

(一)声美赞臣(Karicare)个整型数组a,并经过键盘为数组成分赋值。

(2)设置五个嵌套循环,第3层循环为前七个数组成分,并在每一回循环时将对相应前次数的数组成分设置为最小值(要是当前是第叁次巡回,那么将数组中第三个要素(也正是下标为二的成分)设置为当下的最小值);在第1层循环中,循环比较该因素之后的次第数组成分,并将每回比较结实中较小的数设置为最小值,在其次层循环停止时,将最小值与先河时设置为最小值的数组成分进行交流。当有着循环都成功今后,就将数组成分依照从小到大的逐条重新排列了。

(叁)循环输出数组中的成分,并在输出伍个因素之后进行换行,在下壹行输出后边的6个要素。

 

本文章摘要自明日科技(science and technology)出版的《零基础学C语言》,转发请注脚出处!!!

原题:有”China”,”America”,”Australia”,”France”,”Germany”几个国名。设计贰个程序使其按字母逐一实行排序并出口结果。

  

03ASCII编码表

  • A: ASCII编码表
    • a: 英文全称
      • American Standard Code for Information
        Interchange,美国行业内部音信置换代码
    • b: ASCII编码表由来
      • 处理器中,全部的数额在储存和平运动算时都要选择二进制数表示
      • a、b、c、d那样的五十三个字母(包罗大写)、以及0、一等数字还有部分常用的记号,
        在电脑中贮存时也要利用二进制数来表示
      • 现实用哪些贰进制数字代表哪个符号,当然各类人都得以预订本人的一套(那就叫编码)
      • 我们只要要想互相通信而不造成杂乱,那么大家就亟须使用相同的编码规则,于是United States有关的规范社团就出台了ASCII编码,
        统一分明了上述常用符号用哪些2进制数来表示。
    • c: 粤语编码表
      • GB2312
      • UNICODE
    • d: 字符中首要的ASCII码对应关系
      • a : 97
      • A : 65
      • 0 : 48

思路:应用守旧的排序方法,将字符串保存在字符数组中举行置换,将使得程序变得复杂,难于编写检查。能够将其都保留在字符串指针数组中。排序时如果套用原来一维数组的排序方法,将多个字符串指针在指针数组中的顺序进行置换,程序就变得尤其简练。

04char类型的仓储

  • A: char类型的存储

    • a: 取值范围

      • short:占几个字节,是有标志数据,取值范围-3276八-327陆七
      • char: 占多少个字节,是无符号数据,取值范围0-6553陆
    • b: 类型转换

      • char类型的多寡插足运算时要线程程int数据类型
    • java基础学业,选用法排序。c: 案例代码

        /*  ASCII编码表演示
            字符Java 数据类型,char
            整数Java 数据类型,int

            int 类型和 char 数据类型转换
            char  两个字节, int 四个字节

            char转成int类型的时候,类型自动提示,char数据类型,会查询编码表,得到整数
            int转成char类型的时候,强制转换,会查询编码表

            char存储汉字,查询Unicode编码表

            char可以和int计算,提示为int类型, 内存中两个字节
            char取值范围是0-65535, 无符号的数据类型
        */
        public class ASCIIDemo{
            public static void main(String[] args){
                char c = 'a';
                int i = c + 1;
                System.out.println(i);

                int j = 90;
                char h = (char)j;
                System.out.println(h);

                System.out.println( (char)6 );

                char k = '你';
                System.out.println(k);


                char m = -1;
            }
        }   

规划:编写1个自定义函数:void sort(char *name[])用于排序,void
prins(char
*put[])用于出口。在main()函数中对字符串实行赋值,并且逐壹调用多个自定义函数,达成安顿。

0伍输出全部英文字母

  • A: 输出全体英文字母

    • a: 标题分析

      • 1起2多少个分寸写字母,那么,能够考虑循环2七次。在每一遍循环中,达成钦赐字母的尺寸写打字与印刷
      • 找出ABCDEFG…XYZ那一个字母之间的变化规律
        透过ASCII表发现,前边的假名比它前面的假名,ASCII值大一
        下贰个字母 = 上1个字母 + 1
        如: A B C D
        65 66 67 68
      • 在历次循环中打字与印刷上3个字母大小写,并点名下多个假名
    • b: 解题步骤

      • 概念起始化大写变量,值为’A’; 开端化小写变量,值为’a’
      • 使用for循环,进行26次循环
      • 在历次循环中,打字与印刷大写字母、小写字母。
        老是打字与印刷成功后,更新大写字母值、小写字母值
    • c: 案例代码

        public class Test04 {
            public static void main(String[] args) {
                char da = 'A';
                char xiao = 'a';
                for (int i = 0; i < 26; i++) {
                    System.out.println("大写字母 "+da+" ,小写字母 "+xiao);
                    da++; //更新大写字母值
                    xiao++; //更新小写字母值
                }
            }
        }
        ```
    

代码:

069玖乘法表的辨析

  • A: 9九乘法表的解析

    • a: 打字与印刷格式
      11=1
      1
      2=2 22=4
      1
      3=3 23=6 33=9

    • b: 题目分析
      通过观察发现,若是把一壹=一如此的内容
      看做一颗
      的话,那么打字与印刷结果就成了如下效果:

      **




      如此,正是打字与印刷玖行星,每行打字与印刷星的个数与最近行数相等。
      再观察“13=3 23=6 3三=玖”得出它们如下的变化规律:
      每行第n次 +”
      “+ 行号 +”=”+ 每行第n次 * 行号
      如: 1 +”“+ 2 +”=”+ 12; // 相当于12=2
      2 +”
      “+ 2 +”=”+ 22; // 相当于22=4

    • c: 解题步骤

      • 概念三个外层for循环,初步值从1发端,循环陆回。用来支配打字与印刷的行数
      • 在外层for循环内部,定义五个for循环,开始值从1从头,循环次数与当下行数相等。用来形成每行打印内定次数的乘法公式
        如1*1=1
      • 在内层for循环中,完毕每行钦点次数的乘法公式打字与印刷 如11=1
        System.out.print(k +”
        “+ j +”=”+ j*k +”\t”);
        // 变量k代表:每行中的第n次
        // 变量j代表:行号
      • 在外循环中,当每行钦点次数的乘法公式打印实现后,通过System.out.println()切换来下1行。
        如此这般,再度打字与印刷乘法公式时,就在下一行输出打字与印刷了
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define N 5 
 5 
 6 void sort(char *name[]) //排序
 7 {
 8     int i,j;
 9     char *sp; //用于临时交换
10     for(i = 0;i < N-1;i++) //利用选择排序法进行排序
11     {
12         for(j = i+1;j < N;j++)
13         {
14             if(strcmp(name[i],name[j]) > 0)
15                         { //当name[i]>name[j]时进行交换来排序①
16                 sp = name[i];
17                 name[i] = name[i+1];
18                 name[i+1] = sp;
19             }
20         }
21     }
22 }
23 
24 void prins(char *put[]) //输出
25 {
26     int i;
27     for(i = 0;i < N;i++)
28         printf("%s ",put[i]); //不能写*put[i]②
29 }
30 
31 int main() {
32     char *spa[] = {"China","America","Australia","France","Germany"};
33     sort(spa);
34     prins(spa);
35     getch();
36     return 0;
37 }                    

079玖乘法表的效应实现

  • A: 9玖乘法表的成效完成

    • a: 案例代码

        /*
            利用嵌套for循环,实现99乘法表示
            实现步骤:
              1. 定义外循环控制行数
              2. 内循环控制个数,个数,每次都在递增
              3. 循环中输出,乘法表的格式   1*3=3
        */
    
        public class Test05 {
            public static void main(String[] args) {
                for (int j = 1; j < 10; j++) {
                    for (int k = 1; k <= j; k++) {
                        System.out.print(k +"*"+ j +"="+ j*k +"\t");
                    }
                    System.out.println();
                }
            }
        }
    
        ```
    

 

0八实现数组的遍历

  • A: 落成数组的遍历

    • a: 标题分析

      • 透过轮回,大家得以做到数组七月素的拿走,数组名[索引]
      • 着眼发现,每一个数组成分之间进入了二个逗号”,”举办分隔;并且,整个数组的上下有局地中括号”[]”包裹数组全体因素。
    • b: 解题步骤

      • 利用输出语句达成打字与印刷 左侧的中括号”[”
      • 行使循环,输出数组成分值。输出元素值分为三种状态,如下:
        • 最后1个数组成分,加上二个入手的中括号”]”
        • 非最终2个数组成分,加上2个逗号”,”
    • c: 案例代码

            /*
                定义方法,实现数组的遍历
                遍历中,输出结果  [11,33,565,66,78,89]
                int[] arr = {3,4,45,7};
                结果包含字符串, [  ]  ,
                实现步骤:
                  1. 定义方法实现数组的遍历
                  2. 先打印[ 中括号
                  3. 遍历数组
                    输出数组的元素和逗号
                    判断是否遍历到了数组的最后一个元素,如果是最后一个元素,输出]中括号
            */
            public class ArrayMethodTest{
                public static void main(String[] args){
                    int[] arr = {11,44,55,33,66};
                    printArray(arr);
    
                    int[] arr2 = {22,88,99,33,66};
                    printArray(arr2);
    
                }
                /*
                   定义方法,实现功能
                   返回值: void
                   方法参数: 数组
                */
                public static void printArray(int[] arr){
                    //输出一半中括号,不要换行打印
                    System.out.print("[");
                    //数组进行遍历
                    for(int i = 0 ; i < arr.length ; i++){
                        //判断遍历到的元素,是不是数组的最后一个元素
                        //如何判断 循环变量 到达 length-1
                        if( i == arr.length-1 ){
                            //输出数组的元素和]
                            System.out.print(arr[i]+"]");
                        }else{
                        //不是数组的最后一个元素,输出数组元素和逗号
                            System.out.print(arr[i]+",");
                        }
                    }
                    System.out.println();
                }
            }
        ```
    

运转结果:America Australia China France 德文y

0玖数组逆序原理

  • A: 数组逆序原理

  • a: 题目分析(图解见day0七_source/数组的逆序原理.JPG)

    • 通过观望发现,本标题要完毕原数组成分倒序存放操作。即原数组存储成分为{1壹,22,3三,4肆},
      逆序后为原数组存款和储蓄元素变为{4肆,3三,2贰,1壹}。
    • 通过图解发现,想做到数组成分逆序,其实就是把数组中索引为start与end的成分举办交流。
    • 老是交流后,start索引地方后移,end索引地点前移,再展开交流
    • 直到start地点超越了end地点,交流甘休,此时,数组成分逆序完毕。
  • b: 解题步骤

    • 概念五个目录变量start值为0,变量end值为数经理度减去壹(即数组最终1个因素索引)
    • 应用循环,达成数组索引start地点成分与end地方成分值调换。
    • 在循环换进度中,每趟交流截至后,start地方后移壹,end地方前移①
    • 在循环换进程中,初阶判断start地点是或不是超过了end地点,若已超过,则跳出循环

解释:①strcmp(str1,str2)中,

十数组逆序作用达成

  • A:案例代码

        /*
           数组的逆序:
             数组中的元素,进行位置上的交换
             逆序 不等于 反向遍历
             就是数组中最远的两个索引,进行位置交换,实现数组的逆序
             使用的是数组的指针思想,就是变量,思想,可以随时变换索引
             反转 reverse
             实现步骤:
               1. 定义方法,实现数组的逆序
               2. 遍历数组
                 实现数组的最远索引换位置
                 使用临时的第三方变量
        */
        public class ArrayMethodTest_1{
            public static void main(String[] args){
                int[] arr = {3,5,7,1,0,9,-2};
                //调用数组的逆序方法
                reverse(arr);
                //看到数组的元素,遍历
                printArray(arr);
            }

            /*
               定义方法,实现数组的逆序
               返回值: 没有返回值
               参数:   数组就是参数
            */
            public static void reverse(int[] arr){
                //利用循环,实现数组遍历,遍历过程中,最远端换位
                //for的第一项,定义2个变量, 最后,两个变量++ --
                for( int min = 0 , max = arr.length-1 ; min < max  ; min++,max--){
                    //对数组中的元素,进行位置交换
                    //min索引和max索引的元素交换
                    //定义变量,保存min索引
                    int temp = arr[min];
                    //max索引上的元素,赋值给min索引
                    arr[min] =  arr[max];
                    //临时变量,保存的数据,赋值到max索引上
                    arr[max] = temp;
                }
            }
        }

当str1 > str2时,函数值 > 0;

11接纳排序原理

  • A: 选择排序原理
    • a: 标题分析(图解见day0柒_source/选拔排序原理.JPG)
      • 通过观察发现,本标题要达成把数组元素{一三,四6,22,陆5,叁}举行排序
      • 论及数组排序,就要开始展览成分值大小的可比,通过上海体育场面发现,大家想成功排序要透过若干次的比较才能够成功。
      • 上海体育场所中用每圈要比较的率先个要素与该因素后边的数组成分依次相比到数组的尾声二个因素,把小的值放在第三个数组成分中,数组循环一圈后,则把最小成分值交换来了第一个因素中。
      • 数组再循环1圈后,把第壹小的要素值交流来了第二个成分中。根据那种措施,数组循环多圈以往,就做到了数组成分的排序。那种排序格局大家称为采取排序。

* b: 解题步骤
    * 使用for循环(外层循环),指定数组要循环的圈数(通过图解可知,数组循环的圈数为数组长度 - 1)
    * 在每一圈中,通过for循环(内层循环)完成数组要比较的第一个元素与该元素后面的数组元素依次比较到数组的最后一个元素,把小的值放在第一个数组元素中
    * 在每一圈中,要参与比较的第一个元素由第几圈循环来决定。如上图所示
        * 进行第一圈元素比较时,要比较的第一个元素为数组第一个元素,即索引为0的元素
        * 进行第二圈元素比较时,要比较的第一个元素为数组第二个元素,即索引为1的元素
        * 依次类推,得出结论:进行第n圈元素比较时,要比较的第一个元素为数组第n个元素,即数组索引为n-1的元素

当str1 = str2时,函数值 = 0;

12抉择排序作用达成

A: 案例代码

        /*
          数组的排序: 一般都是升序排列,元素,小到大的排列

          两种排序的方式
             选择排序: 数组的每个元素都进行比较
             冒泡排序: 数组中相邻元素进行比较
             规则: 比较大小,位置交换
        */
        public class ArrayMethodTest_2{
            public static void main(String[] args){
                int[] arr  = {3,1,4,2,56,7,0};
                //调用选择排序方法
                //selectSort(arr);
                printArray(arr);
            }
            /*
                定义方法,实现数组的选择排序
                返回值: 没有
                参数:  数组
                实现步骤:
                  1.嵌套循环实现排序
                    外循环,控制的是一共比较了多少次
                    内循环,控制的是每次比较了多少个元素
                  2. 判断元素的大小值
                    小值,存储到小的索引
            */
            public static void selectSort(int[] arr){
                for(int i = 0 ; i < arr.length - 1; i++){
                    //内循环,是每次都在减少,修改变量的定义
                    for(int j = i+1 ; j < arr.length ; j++){
                        //数组的元素进行判断
                        if(arr[i] > arr[j]){
                            //数组的换位
                            int temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp; 
                        }
                    }
                }
            }

            /*
               定义方法,实现功能
               返回值: void
               方法参数: 数组
            */
            public static void printArray(int[] arr){
                //输出一半中括号,不要换行打印
                System.out.print("[");
                //数组进行遍历
                for(int i = 0 ; i < arr.length ; i++){
                    //判断遍历到的元素,是不是数组的最后一个元素
                    //如何判断 循环变量 到达 length-1
                    if( i == arr.length-1 ){
                        //输出数组的元素和]
                        System.out.print(arr[i]+"]");
                    }else{
                    //不是数组的最后一个元素,输出数组元素和逗号
                        System.out.print(arr[i]+",");
                    }
                }
                System.out.println();
            }
        }

当str1 < str2时,函数值 < 0;

一3冒泡排序功用达成

  • A: 冒泡排序成效实现
    * a: 标题分析
    * 通过观看发现,本标题要落实把数组成分{①3,四陆,2二,陆伍,三}举办排序
    *
    提到数组排序,就要开始展览成分值大小的可比,通过上海体育场合发现,大家想做到排序要通过若干次的可比才能够成功。
    *
    上海教室中相邻的成分值依次比较,把大的值放前面的要素中,数组循环1圈后,则把最大成分值交流来了最终3个成分中。
    数组再循环壹圈后,把第一大的因素值调换来了倒数第3个因素中。遵照那种方法,数组循环多圈未来,
    就完了了数组元素的排序。这种排序形式大家称为冒泡排序。

  • b: 解题步骤
    *
    使用for循环(外层循环),钦赐数组要循环的圈数(通过图解可见,数组循环的圈数为数主任度 –
    壹)
    *
    在每壹圈中,通过for循环(内层循环)完成相邻的成分值依次比较,把大的值放前边的因素中
    *金沙注册送58 , 每圈内层循环的次数,由第几圈循环来决定。如上海体育场合所示
    * 进行第贰圈成分相比较时,内层循环次数为数总裁度 – 一
    * 进行第1圈成分相比较时,内层循环次数为数首席营业官度 – 二
    * 依次类推,得出结论:举办第n圈成分相比较时,内层循环次数为数CEO度 –
    n

  • c: 案例代码

                /*
                  数组的排序: 一般都是升序排列,元素,小到大的排列
                                  两种排序的方式
                     选择排序: 数组的每个元素都进行比较
                     冒泡排序: 数组中相邻元素进行比较
                     规则: 比较大小,位置交换
                */
                public class ArrayMethodTest_2{
                    public static void main(String[] args){
                        int[] arr  = {3,1,4,2,56,7,0};
                        //调用选择排序方法
                        //selectSort(arr);
                                            //调用冒泡排序方法
                        bubbleSort(arr);
                        printArray(arr);
                    }
                    /*
                       定义方法,实现数组的冒泡排序
                       返回值: 没有
                        参数:  数组
                    */
                    public static void bubbleSort(int[] arr){
                        for(int i = 0 ; i < arr.length - 1; i++){
                            //每次内循环的比较,从0索引开始, 每次都在递减
                            for(int j = 0 ; j < arr.length-i-1; j++){
                                //比较的索引,是j和j+1
                                if(arr[j] > arr[j+1]){
                                    int temp = arr[j];
                                    arr[j] = arr[j+1];
                                    arr[j+1] = temp;
                                }
                            }
                        }
                    }
    
                    /*
                       定义方法,实现功能
                       返回值: void
                       方法参数: 数组
                    */
                    public static void printArray(int[] arr){
                        //输出一半中括号,不要换行打印
                        System.out.print("[");
                        //数组进行遍历
                        for(int i = 0 ; i < arr.length ; i++){
                            //判断遍历到的元素,是不是数组的最后一个元素
                            //如何判断 循环变量 到达 length-1
                            if( i == arr.length-1 ){
                                //输出数组的元素和]
                                System.out.print(arr[i]+"]");
                            }else{
                            //不是数组的最后一个元素,输出数组元素和逗号
                                System.out.print(arr[i]+",");
                            }
                        }
                        System.out.println();
                    }
                }
    

 
 ②因为put[i]是一个字符串指针,字符串指针指向3个字符常量的地址,由printf()的函数原型可见那里不可能用*put[i],不然会出错。

1肆数组的扣除查找原理

  • A: 数组的扣除查找原理(图解见day0柒_source/折半摸索原理.JPG)

  • a: 标题分析

    • 通过观察发现,本标题要落到实处查找钦点数值在要素有序的数组中蕴藏的职分(索引),再次来到该职位(索引)。
    • 咱俩应用数组最中间地点的成分值与要物色的钦赐数值进行相比,若相等,重回中间元素值的目录
    • 最中间位置的成分值与要物色的内定数值进行相比较,若不等于,则依据比较的结果,减少查询范围为上次数组查询范围的5/10;
      再依照新的查询范围,更新最中间成分地方,然后选择当中元素值与要寻找的钦命数值实行相比
       相比结实十分,重返中间成分值的目录

      比较结实不对等,继续压缩查询范围为上次数组查询范围的十一分之5,更新最中间成分地点,继续比较,依次类推。
    • 当查问范围裁减到小于0个要素时,则内定数值未有询问到,重临索引值-1。
  • b: 解题步骤

  • 概念二个用来记录索引值的变量,变量min记录当前限定最小索引值,初始值为0;变量max记录当前范围最大索引值,开端值为数经理度-一;变量mid记录当前当前界定最中间成分的索引值,开端值为(min+max)
    / 二

  • 运用循环,判断当前限定下,最中间成分值与钦定查找的数值是不是等于
     若相等,甘休循环,重返当前限定最中间元素的索引值mid
     若不对等,依照比较结实,缩短查询范围为上3回查询范围的貌似
     中间成分值 比
    要查询的数值大,表明要询问的数值在当下限制的最小索引地点与中档索引地点之间,此时,更新查询范围为:
    限制最大索引值 = 上一次中间索引地点 -一;
     中间成分值 比
    要询问的数值小,表达要查询的数值在此时此刻界定的最大索引地方与中间索引地点之间,此时,更新查询范围为:
    限制最小索引值 = 上1次中间索引地点 +壹;

    在新的询问范围中,更新当巧月素值的岗位,再度利用最中间成分值与钦赐查找的数值是还是不是等于。
    中间索引值 = (范围最小索引值 +范围最大索引值) / 贰;

  • 历次查询范围减少四分之二后,使用if语句判断,查询范围是或不是小于0个因素,若小于0个因素,则印证钦命数值未有查询到,重回索引值-壹。

总括:要强烈字符串指针的法则,通过构建指针数组来拓展字符串指针直接的各种交流,套用一维数组的排序方法就足以拓展字符串指针的排序,达到指标。

一伍数组的扣除查找代码达成

  • A: 案例代码

        /*
           数组的查找功能
             在一个数组中,找一个元素,是否存在于数组中,如果存在,就返回索引

             普通查询:
               找到元素在数组中出现的索引,如果没有这个 元素,结果就是负数

        */
        public class ArrayMethodTest_3{
             public static void main(String[] args){
                 int[] arr = {1,3,5,7,9,11,15};
                 int index = binarySearch(arr,10);
                 System.out.println(index);

             }

             /*
                 定义方法,实现,折半查找
                 返回值: 索引
                 参数: 数组,被找的元素 
                 实现步骤:
                   1. 需要的变量定义
                      三个,三个指针

                   2. 进行循环折半
                      可以折半的条件  min <= max

                   3. 让被找元素,和中间索引元素进行比较
                       元素 > 中间索引  小指针= 中间+1
                       元素 < 中间索引  大指针= 中间-1
                       元素 == 中间索引  找到了,结束了,返回中间索引

                    4. 循环结束,无法折半
                      元素没有找到 ,返回-1
             */
             public static int binarySearch(int[] arr, int key){
                 //定义三个指针变量
                 int min = 0 ;
                 int max = arr.length -1 ;
                 int mid = 0;
                 //循环折半,条件 min<=max
                 while( min <= max){
                     //公式,计算中间索引
                     mid = (min+max)/2;
                     //让被找元素,和中间索引元素进行比较
                     if(key > arr[mid]){
                         min = mid + 1;
                     }else if (key < arr[mid]){
                         max = mid - 1;
                     }else{
                         //找到元素,返回元素索引
                         return mid;
                     }
                 }
                 return -1;
             }

            /*
               定义方法,实现数组的普通查询
               返回值: 索引
               参数:   数组, 被找的元素

               实现步骤:
                 1. 遍历数组
                 2. 遍历过程中,使用元素和数组中的元素进行比较
                    如果相同,返回元素在数组中的索引
                    如果不同,返回负数
            */
            public static int search(int[] arr, int key){
                //遍历数组
                for(int i = 0 ; i < arr.length ; i++){
                    //数组元素,被查找的元素比较
                    if(arr[i] == key){
                        //返回索引
                        return i;
                    }
                }
                return -1;
            }
        }

 

相关文章

网站地图xml地图