江西省住房和城乡建设网站,现在能用的网站,东莞软件开发企业,南通个人网站制作7. 数组
7.3.5 数组排序
7.3.5.1 冒泡排序
冒泡排序的思路#xff1a;相邻两个元素进行比较#xff0c;如果前面元素比后面元素大就交换位置#xff0c;每一趟执行完后#xff0c; 就会得到最大的数。 排序过程分析#xff1a; package com.openlab;
/**
* 冒泡排序
*/…7. 数组
7.3.5 数组排序
7.3.5.1 冒泡排序
冒泡排序的思路相邻两个元素进行比较如果前面元素比后面元素大就交换位置每一趟执行完后 就会得到最大的数。 排序过程分析 package com.openlab;
/**
* 冒泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr {6, 9, 1, 5, 2, 3, 8, 4, 7};
print(arr);
// 排序后
for (int i 0; i arr.length - 1; i) {
for (int j 0; j arr.length -1 - i; j) {
if (arr[j] arr[j 1]) {
int temp arr[j 1];
arr[j 1] arr[j];
arr[j] temp;
}
}
}
print(arr);
}
private static void print(int[] arr) {
for (int el : arr) {
System.out.print(el \t);
}
System.out.println();
}
} 7.3.5.2 选择排序
选择排序的思路每次都从剩余元素中找到最小的元素并将其放到有序数组的最后。 排序过程 代码实现
package com.openlab;
/**
* 选择排序
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr {6, 9, 1, 5, 2, 3, 8, 4, 7};
print(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[j];
arr[j] arr[i];
arr[i] temp;
}
}
}
print(arr);
}
private static void print(int[] arr) {
for (int el : arr) {
System.out.print(el \t);
}
System.out.println();
}
}
7.3.5.3 插入排序
排序思路默认第一个元素是有序的然后从后面元素取出元素也前面的元素进行比较然后找到合适 的位置结束。 排序过程 排序实现 7.3.6 数组查找
7.3.6.1 线性查找
思路是将被查找的元素与数组中的每一个元素从前往后一一匹配如果能匹配上则找到否则找不到
public class LineSearch {
public static void main(String[] args) {
int[] arr {6, 9, 1, 5, 2, 3, 8, 4, 7};
int key 8; // 要查找的元素
int index -1;
for (int i 0; i arr.length; i) {
if (arr[i] key) {
index i;
break;
}
}
if (index ! -1) System.out.println(arr[index]);
else System.out.println(没找到);
}
}
7.3.6.2 折半查找
也叫二分查找思路是对定义两个指针分别指向被查找数组的第一个元素和最后一个元素的位置然后 再定义一个中间指针指向第一个指针加上第二个指针然后除以 2 后的位置。如果被查找的元素小于中间 指针对应的元素则在左边区域查找如果被查找的元素大于中间指针对应元素则在右边区域查找。 要实现折半查找被查找的数组必须有序。
/**
* 折半查找
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr {6, 9, 1, 5, 2, 3, 8, 4, 7};
// 排序
for (int i 0; i arr.length - 1; i) {
for (int j 0; j arr.length - 1 - i; j) {
if (arr[j] arr[j1]) {
int tmp arr[j1];
arr[j1] arr[j];
arr[j] tmp;
}
}
}
int key 8; // 被查找的元素
int left 0; // 左指针
int right arr.length - 1; // 右指针
int middle (left right) / 2; // 中间指针
while (arr[middle] ! key) {
if (key arr[middle]) {
right middle - 1;
}
if (key arr[middle]) {
left middle 1;
}
if (middle right) {
middle -1;
break;
}
middle (left right) / 2;
}
System.out.println(arr[middle]);
}
}
练习题 import java.util.Scanner;
public class Example01 {
public static void main(String[] args) {
String line1 input(1);
String line2 input(2);
/*
// 从字符串 line1 中切出元素
String[] line1Arr line1.split( );
String[] line2Arr line2.split( );
//System.out.println(Arrays.toString(line1Arr));
//System.out.println(Arrays.toString(line2Arr));
// 定义要判断的数组
int[] list1 new int[Integer.parseInt(line1Arr[0])];
int[] list2 new int[Integer.parseInt(line2Arr[0])];
// 给数组添加元素
for (int i 1; i line1Arr.length; i) {
list1[i-1] Integer.parseInt(line1Arr[i]);
}
System.out.println(list1 Arrays.toString(list1));
for (int i 1; i line2Arr.length; i) {
list2[i-1] Integer.parseInt(line2Arr[i]);
}
System.out.println(list2 Arrays.toString(list2));
*/
//int[] list1 defineArray(line1);
//int[] list2 defineArray(line2);
// 判断两个数组是否相同
//boolean flag equals(list1, list2);
boolean flag equals(defineArray(line1), defineArray(line2));
System.out.println(flag);
}
/**
* 从接收到的字符串中截取需要的数据到数组中并返回
* param line 需要截取字符串
* return 返回最终的整型数组
*/
public static int[] defineArray(String line) {
// 判断接收到的字符串是否为空
if (linenull || line.isBlank()) {
System.out.println(你输入的是空。程序退出);
System.exit(1);
}
// 从字符串 line1 中切出元素
String[] lineArr line.split( );
// 定义要判断的数组
int[] list1 new int[Integer.parseInt(lineArr[0])];
// 给数组添加元素
for (int i 1; i lineArr.length; i) {
list1[i-1] Integer.parseInt(lineArr[i]);
}
return list1;
}
/**
* 接收用户输入
* param n 输入的编号
* return 返回最终用户输入值
*/
public static String input(int n) {
Scanner sc new Scanner(System.in);
System.out.println(Enter listn);
return sc.nextLine();
}
public static boolean equals(int[] list1, int[] list2) {
// 1. 判断两个数组的元素个数是否相同如果不同则直接返回 false
if (list1.length ! list2.length) {
return false;
}
for (int i 0; i list1.length; i) {
if (list1[i] ! list2[i]) {
return false;
}
}
return true;
}
}作业练习