目录
一、数据结构
1.数组:数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。
2.链表:链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。
3.树:树是典型的非线性结构,它是包括,2 个结点的有穷集合 K。
4.图:图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。
1.数组
二分法:
代码:
public class ch03 {
public static void main(String[] args) {
//定义要查找的数n
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数");
int n = in.nextInt();
//二分查找的数据必须是有序的
int num[] = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90};
//定义最小下标和最大下标
int mix = 0, max = num.length - 1;
//中间数据下标
int center = (mix + max) / 2;
while (true) {
//若数组中间值大于要查找的数,则比中间值小一个的数给最大值
//若数字中间值小于要查找的数,则比中间值大一个的数给最小值
if (num[center] > n) {
max = center - 1;
} else if (num[center] < n) {
mix = center + 1;
} else {
//中间值等于查找的数,跳出循环
break;
}
if (mix > max) {
center=-1;
break;
}
//当边界值发生变化,需要更新中间下标
center = (mix + max) / 2;
}
//输出查找数的在数组的下标
System.out.println(n + "的位置在数组下标的" + center);
}
}
结果:
2.排序算法
冒泡排序:
代码:
public class ch04 {
public static void main(String[] args) {
int num[] = new int[]{145, 40, 567, 3, 15, 8, 70, 55, 33};
for (int i = 0; i < num.length - 1; i++) {
for (int j = 0; j < num.length - i - 1; j++) {
if (num[j] > num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
System.out.println("从小到大排序结果:");
for (int i = 0; i < num.length ; i++) {
System.out.println(num[i]+" ");
}
}
}
结果:
选择排序:
代码:
public static void main(String[] args) {
// 选择排序
int arr[] = new int[]{145, 40, 567, 3, 15, 8, 70, 55, 33};
// 遍历所有的数
for (int i = 0; i < arr.length; i++) {
int min = i;
// 把当前遍历的数和后面所有的数进行比较,并记录下最小的数的下标
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
// 记录最小的数的下标
min = j;
}
}
// 如果最小的数和当前遍历的下标不一致,则交换
if (i != min) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
System.out.println("从小到大排序结果:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
结果:
插入排序 :
代码:
public class ch10 {
public static void main(String[] args) {
int arr[] = {145, 40, 567, 3, 15, 8, 70, 55, 33};
for (int i = 0; i < arr.length; i++) {
for (int j = i-1; j >=0 ; j--) {
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr [j+1];
arr [j+1] = temp;
}else
break;
}
}
for (int i : arr) {
System.out.print(i+" ");
}
}
}
结果:
数组反转:
代码:
public static void main(String[] args) {
// 数组反转
int arr[] = new int[]{145, 40, 567, 3, 15, 8, 70, 55, 33};
for (int m=0,n=arr.length-1;m<n;m++,n--) {
int temp=arr[m];
arr[m]=arr[n];
arr[n]=temp;
}
for (int k=0;k<arr.length;k++){
System.out.println(arr[k]+"");
}
System.out.println("");
}
}
结果:
数组的扩容:
public static void main(String[] args) {
// 数组的扩容
int[] arr = {145, 40, 567};
int[] a = new int[6];
for (int i = 0; i < arr.length; i++) {
//遍历一遍,将数组arr的值传入数组arr_new中
a[i] = arr[i];
}
// 为新数组赋值
a[a.length - 1] = 6;
for (int b : a) {
System.out.print(b + " ");
}
System.out.println();
}
}
二、心得体会
被算法折磨到心累的一天,嘤嘤嘤,能看懂,自己写费劲,明天继续努力!!!