挑选排序,对多少个国家的名目举行排序详细剖析

从小到大的选择排序 是从三个数组中逐条选出 最小数值 输出,第二小的数值输出,第3小的数值输出…
…直到最后贰个数组中最后1个数遍历达成,则 整个排序输出完成。

0一奇数求和演习

  • A: 奇数求和演练

    • a: 标题分析

      • 为了记录累加和的值,大家须求定义三个囤积累加和的变量
      • 咱俩要获得到1-十0范围内的数
      • 认清当前数是或不是为奇数,是奇数,完毕增进和操作
      • 加上完结后,最后展现下累加和的值
    • b: 解题步骤

      • 概念一个用来记录累加和的变量
      • 选择for循环语句,马克down Preview Enhanced: Toggle Scroll
        Sync完结一-拾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);
            }
        }
    

 

选拔法排序指每一次选用所要排序的数组中的最大值(由小到大排序则选用最小值)的数组成分,将以此数组成分的值与最前面未有实行排序的数组成分的值沟通。以数字玖、6、一伍、4、2为例,选用选取法贯彻数字按从小到大进展排序,每一次调换的逐条如图八.一7所示。

 亚洲必赢官网 1

图八.17 
选取法排序示意图

从图八.壹7能够窥见,在首先次排序进程元帅第二个数字和微小的数字实行了职务交流;而第一次排序进程中,将第二个数字和剩余的数字中幽微的数字举行了岗位调换;依此类推,每一趟都将下3个数字和剩下的数字中细小的数字举行岗位调换,直到将一组数字按从小到大排序。

上面通超过实际例来看一下如何通进程序行使选用法贯彻数组成分从小到大的排序。 

注:代码通过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玖中间),其每位数字立方之和卓殊该3人数本身。
        如153 = 111 + 33挑选排序,对多少个国家的名目举行排序详细剖析。3 + 555,即 四位数本人 = 百位数立方 +
        十人数立方 + 个位数立方;
      • 取得水仙花范围内的保有多少人数(100-99九中间的每一个贰位数)
      • 判断该贰人数是不是知足天葱数,满意,打字与印刷该二人数
    • b: 解题步骤

      • 应用for循环,获得100-999中间的种种三位数
      • 收获三个人数中国百货公司位数字、十二人数字、个位数字
      • 选择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  }

 

运维程序,显示结果如图八.18所示。

 亚洲必赢官网 2

图八.1八 
选拔排序运行图

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

(一)声明一(Wissu)(Beingmate)个整型数组a,并透过键盘为数组成分赋值。

(贰)设置2个嵌套循环,第3层循环为前捌个数组成分,并在历次循环时将对应该前次数的数组成分设置为最小值(假设当前是第3遍巡回,那么将数组中第一个成分(也正是下标为二的成分)设置为当前的最小值);在第三层循环中,循环相比该因素之后的逐条数组成分,并将每一次相比较结实中较小的数设置为最小值,在其次层循环结束时,将最小值与发轫时设置为最小值的数组成分举办交流。当有着循环都做到现在,就将数组成分依据从小到大的一1重新排列了。

(三)循环输出数组中的成分,并在输出多个要素之后进行换行,在下一行输出后边的五个成分。

 

正文章摘要自后天科技(science and technology)出版的《零基础学C语言》,转发请评释出处!!!

原题:有”China”,”America”,”Australia”,”France”,”德文y”七个国名。设计1个顺序使其按字母顺序进行排序并出口结果。

  

03ASCII编码表

  • A: ASCII编码表
    • a: 英文全称
      • American Standard Code for Information
        Interchange,美国专业新闻置换代码
    • b: ASCII编码表由来
      • 处理器中,全数的数量在蕴藏和平运动算时都要动用二进制数表示
      • a、b、c、d这样的55个字母(包罗大写)、以及0、一等数字还有一部分常用的标记,
        在微型总括机中存款和储蓄时也要动用2进制数来代表
      • 切实用哪些二进制数字代表哪个符号,当然各类人都能够约定自个儿的1套(那就叫编码)
      • 大家只要要想相互通讯而不造成杂乱,那么大家就亟须接纳相同的编码规则,于是美利坚合作国有关的口径组织就出台了ASCII编码,
        统一明确了上述常用符号用哪些二进制数来表示。
    • c: 汉语编码表
      • GB2312
      • UNICODE
    • d: 字符中主要的ASCII码对应关系
      • a : 97
      • A : 65
      • 0 : 48

思路:应用守旧的排序方法,将字符串保存在字符数组中进行调换,将使得程序变得复杂,难于编写检查。能够将其都保留在字符串指针数组中。排序时只要套用原来一维数组的排序方法,将五个字符串指针在指针数组中的顺序进行交流,程序就变得十二分简单易行。

0四char类型的蕴藏

  • A: char类型的储存

    • a: 取值范围

      • short:占七个字节,是有号子数据,取值范围-32768-327六7
      • char: 占四个字节,是无符号数据,取值范围0-65536
    • b: 类型转换

      • char类型的多少出席运算时要线程程int数据类型
    • 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;
            }
        }   

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

0五出口全体英文字母

  • A: 输出全体英文字母

    • a: 标题分析

      • 总结二四个大小写字母,那么,能够设想循环二陆遍。在每一趟循环中,完毕内定字母的尺寸写打字与印刷
      • 找出ABCDEFG…XYZ那几个字母之间的变化规律
        透过ASCII表发现,后边的字母比它眼下的假名,ASCII值大壹
        下3个字母 = 上贰个假名 + 一
        如: A B C D
        65 66 67 68
      • 在每一次循环中打字与印刷上多少个字母大小写,并钦点下八个假名
    • 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开首,循环7回。用来支配打字与印刷的行数
      • 在外层for循环内部,定义3个for循环,起头值从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;34     prins;35     getch();36     return 0;37 }                    

079玖乘法表的机能完毕

  • A: 99乘法表的功用完成

    • 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();
                }
            }
        }
    
        ```
    

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

0捌贯彻数组的遍历

  • A: 完毕数组的遍历

    • a: 标题分析

      • 由此巡回,大家得以完结数组否月素的收获,数组名[索引]
      • 着眼发现,每种数组元素之间投入了二个逗号”,”举办分隔;并且,整个数组的光景有一对中括号”[]”包裹数组全部因素。
    • b: 解题步骤

      • 选用输出语句落成打字与印刷 左边的中括号”[”
      • 利用循环,输出数组成分值。输出成分值分为三种状态,如下:
        • 末段三个数组成分,加上3个右手的中括号”]”
        • 非最后三个数组成分,加上二个逗号”,”
    • 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();
                }
            }
        ```
    

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

亚洲必赢官网,0九数组逆序原理

  • A: 数组逆序原理

  • a: 标题分析(图解见day07_source/数组的逆序原理.JPG)

    • 通过观察发现,本标题要完结原数组成分倒序存放操作。即原数组存款和储蓄成分为{1一,2二,3叁,4四},
      逆序后为原数组存款和储蓄成分变为{4④,3三,2二,1壹}。
    • 因而图解发现,想形成数组成分逆序,其实就是把数组中索引为start与end的因素举办交流。
    • 老是交流后,start索引地方后移,end索引地点前移,再开始展览沟通
    • 以至start地方超越了end地点,交流停止,此时,数组成分逆序完结。
  • b: 解题步骤

    • 概念多少个目录变量start值为0,变量end值为数CEO度减去一(即数组最终一个要素索引)
    • 运用循环,达成数组索引start地点成分与end地方成分值交流。
    • 在循环换进程中,每一次交流停止后,start地点后移壹,end地点前移一
    • 在循环换进度中,先河判断start地方是还是不是当先了end地点,若已当先,则跳出循环

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

10数组逆序功用实现

  • 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)
      • 通过观看发现,本标题要兑现把数组成分{①3,四陆,2贰,65,叁}举办排序
      • 论及数组排序,就要进行成分值大小的可比,通过上海教室发现,我们想成就排序要经过多少次的可比才能够不辱职务。
      • 上海体育场所中用每圈要比较的率先个要素与该因素前面包车型大巴数组成分依次相比到数组的末段三个因素,把小的值放在第多个数组元素中,数组循环1圈后,则把最小成分值沟通到了首个元素中。
      • 数组再循环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();
            }
        }

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

1三冒泡排序功效落成

  • A: 冒泡排序功用达成
    * a: 标题分析
    * 通过观看发现,本标题要落到实处把数组成分{1叁,四⑥,2二,六五,叁}进行排序
    *
    提到数组排序,就要拓展成分值大小的比较,通过上海体育地方发现,大家想形成排序要透过若干次的相比才能够做到。
    *
    上航海用教室中相邻的成分值依次相比,把大的值放后边的因素中,数组循环1圈后,则把最大成分值沟通来了最终叁个要素中。
    数组再循环1圈后,把第3大的成分值调换成了尾数首个因素中。依照那种办法,数组循环多圈今后,
    就实现了数组成分的排序。那种排序格局大家誉为冒泡排序。

  • b: 解题步骤
    *
    使用for循环(外层循环),内定数组要循环的圈数(通过图解可见,数组循环的圈数为数老板度 –
    1)
    *
    在每1圈中,通过for循环(内层循环)完毕相邻的成分值依次比较,把大的值放前边的因素中
    * 每圈内层循环的次数,由第几圈循环来决定。如上航海用体育场面所示
    * 进行第3圈成分相比时,内层循环次数为数老总度 – 1
    * 进行第三圈成分相比较时,内层循环次数为数主管度 – 二
    * 依次类推,得出结论:实行第n圈成分相比时,内层循环次数为数老董度 –
    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();
                    }
                }
    

总计:要强烈字符串指针的规律,通过营造指针数组来拓展字符串指针直接的逐条交流,套用一维数组的排序方法就能够实行字符串指针的排序,达到指标。

1四数组的扣除查找原理

  • A: 数组的扣除查找原理(图解见day07_source/折半查找原理.JPG)

  • a: 标题分析

    • 通过观看发现,本标题要贯彻底追查找内定数值在要素有序的数组中贮存的岗位(索引),重返该岗位(索引)。
    • 我们应用数组最中间地方的成分值与要物色的钦赐数值进行比较,若相等,重临中间成分值的目录
    • 最中间地点的成分值与要摸索的钦命数值实行相比,若不对等,则依照比较的结果,裁减查询范围为上次数组查询范围的四分之二;
      再依据新的询问范围,更新最中间成分地方,然后采纳当兰月素值与要寻找的钦赐数值进行相比
       比较结实特出,再次回到中间成分值的目录

      相比结实不等于,继续减少查询范围为上次数组查询范围的二分一,更新最中间元素地方,继续比较,依次类推。
    • 当查问范围收缩到小于0个因素时,则钦命数值未有查询到,重临索引值-一。
  • b: 解题步骤

  • 概念二个用来记录索引值的变量,变量min记录当前界定最小索引值,起头值为0;变量max记录当前限制最大索引值,伊始值为数老董度-一;变量mid记录当前当前限定最中间成分的索引值,早先值为(min+max)
    / 二

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

    在新的询问范围中,更新当相月素值的职位,再一次利用最中间成分值与钦点查找的数值是还是不是等于。
    中间索引值 = (范围最小索引值 +范围最大索引值) / 二;

  • 老是查询范围裁减2/四后,使用if语句判断,查询范围是还是不是小于0个因素,若小于0个要素,则印证内定数值未有询问到,重返索引值-一。

1伍数组的扣除查找代码实现

  • 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地图