008、java数组-高级

来源:互联网 发布:access数据库 excel 编辑:程序博客网 时间:2024/05/19 15:41
一、数组排序1、数组排序之冒泡排序:相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处2、数组排序之选择排序:从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处二、数组查找1、基本查找:数组元素无序(从头找到尾)2、二分查找(折半查找):数组元素有序(注意数组无序的时候只能用基本查找)

1、数组高级冒泡排序原理图解
public class ArrayDemo {public static void main(String[] args) {// 定义一个数组int[] arr = { 24, 69, 80, 57, 13 };System.out.println("排序前:");printArray(arr);/*// 第一次比较// arr.length - 1是为了防止数据越界// arr.length - 1 - 0是为了减少比较的次数for (int x = 0; x < arr.length - 1 - 0; x++) {if (arr[x] > arr[x + 1]) {int temp = arr[x];arr[x] = arr[x + 1];arr[x + 1] = temp;}}System.out.println("第一次比较后:");printArray(arr);// 第二次比较// arr.length - 1是为了防止数据越界// arr.length - 1 - 1是为了减少比较的次数for (int x = 0; x < arr.length - 1 - 1; x++) {if (arr[x] > arr[x + 1]) {int temp = arr[x];arr[x] = arr[x + 1];arr[x + 1] = temp;}}System.out.println("第二次比较后:");printArray(arr);// 第三次比较// arr.length - 1是为了防止数据越界// arr.length - 1 - 2是为了减少比较的次数for (int x = 0; x < arr.length - 1 - 2; x++) {if (arr[x] > arr[x + 1]) {int temp = arr[x];arr[x] = arr[x + 1];arr[x + 1] = temp;}}System.out.println("第三次比较后:");printArray(arr);// 第四次比较// arr.length - 1是为了防止数据越界// arr.length - 1 - 3是为了减少比较的次数for (int x = 0; x < arr.length - 1 - 3; x++) {if (arr[x] > arr[x + 1]) {int temp = arr[x];arr[x] = arr[x + 1];arr[x + 1] = temp;}}System.out.println("第四次比较后:");printArray(arr);*/// 既然听懂了,那么上面的代码就是排序代码// 而上面的代码重复度太高了,所以用循环改进// for (int y = 0; y < 4; y++) {// for (int x = 0; x < arr.length - 1 - y; x++) {// if (arr[x] > arr[x + 1]) {// int temp = arr[x];// arr[x] = arr[x + 1];// arr[x + 1] = temp;// }// }// }/*// 由于我们知道比较的次数是数组长度-1次,所以改进最终版程序for (int x = 0; x < arr.length - 1; x++) {for (int y = 0; y < arr.length - 1 - x; y++) {if (arr[y] > arr[y + 1]) {int temp = arr[y];arr[y] = arr[y + 1];arr[y + 1] = temp;}}}System.out.println("排序后:");printArray(arr);*///由于我可能有多个数组要排序,所以我要写成方法bubbleSort(arr);System.out.println("排序后:");printArray(arr);}//冒泡排序代码public static void bubbleSort(int[] arr){for (int x = 0; x < arr.length - 1; x++) {for (int y = 0; y < arr.length - 1 - x; y++) {if (arr[y] > arr[y + 1]) {int temp = arr[y];arr[y] = arr[y + 1];arr[y + 1] = temp;}}}}// 遍历功能public static void printArray(int[] arr) {System.out.print("[");for (int x = 0; x < arr.length; x++) {if (x == arr.length - 1) {System.out.print(arr[x]);} else {System.out.print(arr[x] + ", ");}}System.out.println("]");}}
2、 数组高级选择排序原理图解
public class ArrayDemo {public static void main(String[] args) {// 定义一个数组int[] arr = { 24, 69, 80, 57, 13 };System.out.println("排序前:");printArray(arr);/*// 第一次int x = 0;for (int y = x + 1; y < arr.length; y++) {if (arr[y] < arr[x]) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}System.out.println("第一次比较后:");printArray(arr);// 第二次x = 1;for (int y = x + 1; y < arr.length; y++) {if (arr[y] < arr[x]) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}System.out.println("第二次比较后:");printArray(arr);// 第三次x = 2;for (int y = x + 1; y < arr.length; y++) {if (arr[y] < arr[x]) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}System.out.println("第三次比较后:");printArray(arr);// 第四次x = 3;for (int y = x + 1; y < arr.length; y++) {if (arr[y] < arr[x]) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}System.out.println("第四次比较后:");printArray(arr);*//*//通过观察发现代码的重复度太高,所以用循环改进for(int x=0; x<arr.length-1; x++){for(int y=x+1; y<arr.length; y++){if(arr[y] <arr[x]){int temp = arr[x];arr[x] = arr[y]; arr[y] = temp;}}}System.out.println("排序后:");printArray(arr);*///用方法改进selectSort(arr);System.out.println("排序后:");printArray(arr);}public static void selectSort(int[] arr){for(int x=0; x<arr.length-1; x++){for(int y=x+1; y<arr.length; y++){if(arr[y] <arr[x]){int temp = arr[x];arr[x] = arr[y]; arr[y] = temp;}}}}// 遍历功能public static void printArray(int[] arr) {System.out.print("[");for (int x = 0; x < arr.length; x++) {if (x == arr.length - 1) {System.out.print(arr[x]);} else {System.out.print(arr[x] + ", ");}}System.out.println("]");}}
3、数组高级二分查找原理图解
public class ArrayDemo {public static void main(String[] args) {//定义一个数组int[] arr = {11,22,33,44,55,66,77};//写功能实现int index = getIndex(arr, 33);System.out.println("index:"+index);//假如这个元素不存在后有什么现象呢?index = getIndex(arr, 333);System.out.println("index:"+index);}/* * 两个明确: * 返回值类型:int * 参数列表:int[] arr,int value */public static int getIndex(int[] arr,int value){//定义最大索引,最小索引int max = arr.length -1;int min = 0;//计算出中间索引int mid = (max +min)/2;//拿中间索引的值和要查找的值进行比较while(arr[mid] != value){if(arr[mid]>value){max = mid - 1;}else if(arr[mid]<value){min = mid + 1;}//加入判断if(min > max){return -1;}mid = (max +min)/2;}return mid;}}







原创粉丝点击