###学习心得###

今天的一些排序知识之前学过一些,再一次捡起来了,运用到实际里才发现程序优化很重要

心情

学习的劲头更大了,因为稍微熟练了一些

 

今日小总结:

 

 

 

数据结构:

1.数组是最基本的数据结构,是一张表。线性表(数据元素之间是一对多的关系)除了第一个和最后一个之外,其余的元素都是首尾连接。

2.链表:

3.树

4.图

练习题:

找出一个数在数组中的位置
在数组中是否存在,如果存在,返回下标,如果不存在返回-1
如果找到了把下标i保存起来,显示你要找的数是xxx,在目标数组中的数是xxx 如果没找到,则显示你要找的数是xxx,在目标数组中不存在
public class ch01 {
    public static void main(String[] args) {
        int []arr = new int[]{1,34,54,56,43,34,-8};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int num = sc.nextInt();
//        boolean flag = false;
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==num){
                index=i;
//                flag = true;
                break;
            }
        }


        if (index!=-1){
            System.out.println("你要找的数"+num+"在目标数组:"+index);
        }else  {
            System.out.println("你要找的数:"+num+"在目标数组中不存在");
        }
    }
写程序的思路分享:
1.先完成需求要求的功能
2.根据程序运行的结果进行优化和处理
3.代码重构(让代码更少)
4.提升效率(前三步都完成有能力研究研究算法)

排序算法:  如下

############################################冒泡排序 ############################################    

 

冒泡排序思路分析:

先拿第一个数和后面的数一一比较大小

 

 

先拿第一个数和后面的数一一比较大小

冒泡排序需要两层循环:

for外层for循环控制的是需要各个数之间比较几轮,内层for循环控制的是每个数的真正的比较。

给一个简单的冒泡排序写法:

import java.util.Arrays;
public class ch04 {
    public static void main(String[] args) {
        //冒泡排序简便
        int[] arr = new int[]{1, 2, 3, 44, 5, 6, 76, -8};
       Arrays.sort(arr);
        for (int i:arr){
            System.out.print(i+".");
        }
    }

############################################插入排序############################################

 

 

 

定义参照物

定义上一个元素的下标

当上一个数的下标有效不能小于0,并且还要保证当前的数比他上一个数小,这时候,才能让当前数向前移。

移位(前面的数后移一位)

插入排序代码表示如下

public class ch06 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 24, 56, 34, 546, -8, -127, 45};
        int current;
        for (int i = 0; i < arr.length - 1; i++) {
            current = arr[i + 1];
            int perIndex = i;        
            while (perIndex >= 0 && current < arr[perIndex]) {
                arr[perIndex + 1] = arr[perIndex];
                perIndex--;
            }
            arr[perIndex + 1] = current;
        }
        for (int i : arr) {
            System.out.print( i + ".");
        }
        System.out.println();
    }
}

  

############################################选择排序#############################################

 

 

 

第一轮:i=0 ,mindex= ,里面的for循环int j = 1;j<7

* if(arr0 > arr1{}.由于if不满足,则继续下一次比较;以此类推

选择排序代码表示如下:

public class ch05 {
    public static void main(String[] args) {
        int [] arr = new int[]{1,25,48,12,10,-8,-127,56};
        for (int i = 0; i < arr.length ; i++) {
            //假设最小数的1下标
            int minIndex = i;
            for (int j =i + 1; j < arr.length; j++) {
                if (arr[minIndex] > arr[j]){//找到了最小值
                    minIndex = j;
                }
            }
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
            System.out.print("第" + (i+1) + "次的比较结果是:");
            for(int i1 : arr){
                System.out.print(i1 + ".");
            }
            System.out.println();
        }
    }
}

  注意:由于太多,剩下的几种过几天讲,一起太多也记不住。

public class Ch07 {
    /*
        创建一个等长的数组
        把当前数组的第一位元素倒着添加到新的数组
        新数组赋值给老数组
        int [] newArr = new int [arr.length]
     */
    //方法一
    public static void main(String[] args) {
        int[] arr = new int[]{1, 24, 56, 34, 546, -8, -127, 45};
        int[] newArr = new int[arr.length];
        for (int i = arr.length - 1; i >= 0; i--) {
            newArr[i] = arr[arr.length - 1 - i];
        }
        arr = newArr;
        for (int i : arr) {
            System.out.print(i + ".");
        }
    }

    //方法二
    public static void main2(String[] args) {

        int[] arr = new int[]{1, 24, 56, 34, 546, -8, -127, 45};
        for (int i = 0; i < arr.length; i++) {
            int temp = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = arr[i];
            arr[i] = temp;
        }
        for (int i : arr) {
            System.out.print(i + ".");
        }
    }
}

  

!!!!今日事今日毕!!!!

 

 

 

 

posted on 2022-07-15 19:00  骐琳  阅读(22)  评论(0编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~