20220715朱云新
JAVA初始的第三天
数据结构
1,数组
最基本的数据结构;是一张表,线性表(数据元素之间是一对一的,除了第一个和最后一个之外,其余元素都是首尾连接,所以数组有顺序)
2,链表
3,树
3,图
算法:
1,线性查找:
简单方便,但不适合数量大的数据。
2,二分查找:
必须要排序。
3,排序算法:
1.冒泡排序
/*
思路分析:
1,我先拿第一个数和后面的数一一比较大小,如果比这个数小就换位,经过一轮比较之后,最大的数就会在最后
2,经过数组长度减一次的比较,就会排序完成
3,外层循环:表示排几轮
4,里层循环:实现数和数之间的比较
*/
int []a = {1,58,46,33,10,5,-8,9,16,78,99,-45,48,33};
int i = 0;
int j = 1;
int m;
for (i=0;i<(a.length-1);i++){
for (j=1;j<a.length;j++){
if (a[j-1]<a[j]) {
m=a[j];
a[j]=a[j-1];
a[j-1]=m;
}
}
}
for(int b : a){
System.out.print(b + ",");
}
简易算法:
直接调用方法Arrays.sort(数组)
2,快速排序
3,插入排序
4,选择排序
/**
思路分析
*第一轮,i等于-。m=0,里层for循环,int j=1; j <a.lenth;
* if(arr[0])>arr[1]{}.由于if不满足,则继续下一次的比较。
* j=2 ,if(arr[0]>arr[2]){}.由于if不满足,则继续下一次比较。
* j= 3,if(arr[0]>arr[3]){}.由于if不满足,则继续下一次比较。
* j= 4,if(arr[0]>arr[4]){}.由于if不满足,则继续下一次比较。
* j=5 ,if(arr[0]>arr[5]){}.由于if满足条件,执行了交换操作 ,m=5。
* j=6 ,if(arr[5]>arr[6]){}.由于if不满足,则继续下一次比较。
* j=7 ,if(arr[5]>arr[7]){}.由于if不满足,则继续下一次比较。
* 到此为止,里层for循序执行完毕。m = 5 。执行的
* int n = a[5];
* a[5] = a[0];
* a[0] = n;
* i = 0 的这次外层循环执行完毕,数组最小的数就在第一位了。
* 第二轮继续
* 以此类推到第七轮,排序完毕
*/
int[] a = {1, 58, 46, 33, 10, 5, -8, 9, 16, 78, 99, -45, 48, 33};
int i;
int j;
int n;
for (i = 0; i < a.length ; i++) {
int m =i;
for (j =i+ 1; j < a.length; j++) {
if (a[m] > a[j]) {
m = j;
}
}
n = a[m];
a[m]=a[i];
a[i]=n;
}
for (int b : a) {
System.out.print( b + ",");
}
5,希尔排序
6,堆排位
7,归并排序
8,桶排序
数组反转;
int[] a = {1, 58, 46, 33, 10, 5, -8, 9, 16, 78, 99, -45, 48, 33};
int[]b = new int[a.length];
for (int i=(a.length-1);i>=0;i--){
for (int j =0 ; j<a.length;j++){
if((i+j)==(a.length-1)) {
b[j] = a[i];
}
}
}
数组的扩容:
int []arr=new int[]{3,4,6};
int [] temp=new int[6];//定义一个临时的数组
for (int i = 0; i < arr.length; i++) {
temp[i]=arr[i];
}
arr=temp;
for (int i : arr) {
**System.out.println(i);
}
import java.util.Scanner;
public class Sddd {**
public static void main(String[] args) {
// 数据结构
// 1.数组是最基本的数据结构,是一张表,线性表(数据元素之间是一对一,除了第一个和最后一个之外,其余的元素都是收尾连接)
// 2.链表
// 3.树、
// 4.图
/*
找出一个数在数组中的位置
在数组中是否存在,如果存在,返回下标,如果不存在还原-1,
*/
int[] arr = new int[]{1, 58, 46, 33, 10, 5, -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) {
// System.out.println("你要找的数是:"+num+"在目标数组中的下标是:"+i);
flag = true;
index = i;
break;
}
// else{
//// System.out.println("你要找的数是:"+num+"在目标数组中的下标不存在");
// }
}
if (flag) {
System.out.println("你要找的数是:" + num + "在目标数组中的下标是:" + index);
} else {
System.out.println("你要找的数是:" + num + "在目标数组中的下标不存在");
}
}
}****
学习感受:
1.今天学习了算法,不是很懂,但是可以简单写一些
2.自己钻研了一些,各种排序,会有一些相同点
3.感觉java有点杂,但是会自己努力的
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术