###学习心得###
今天的一些排序知识之前学过一些,再一次捡起来了,运用到实际里才发现程序优化很重要
心情
学习的劲头更大了,因为稍微熟练了一些
今日小总结:
数据结构:
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 + ".");
}
}
}
!!!!今日事今日毕!!!!