第九、Java数组的常见操作(冒泡、选择排序、数组翻转)

来源:互联网 发布:每天一杯速溶咖啡 知乎 编辑:程序博客网 时间:2024/06/09 21:24


一、求最值

需求1:一个数组取出最大值

 /*定义一个获取最大值的功能:1、确定结果 :返回值类型 int2、未知内容:要获取哪个数组的最大值没有确定,则是数组没有确定思路:1、定义一个变量,记录住数组的比较大的元素。2、遍历整个数组,让数组的每一个元素都和该变量进行对比即可。3、当变量遇到比它大的元素,则让该变量记录该元素的值,当循环结束时,最大值产生了*/public static int getMax(int[] arr){//定义变量记录较大的值,初始化为数组中的任意一个元素。int max = arr[0];for(int x=1; x<arr.length; x++){if(arr[x]>max){ //如果发现有元素比max大,那么max变量就记录该元素。max = arr[x];                         }}return max;}


二、选择排序

需求2:定义一个函数接收一个int类型的数组对象, 把数组中的最大值放在数组中的第一位。

选择排序(直接排序):使用一个元素与其他 的元素挨个比较一次,符合条件交换位置。

        public static void main(String[] args)          {   int[] arr = {12,5,17,8,9};  //对于5元素的数组,只需要找出4个最大值就可以排序了。  selectSort(arr);        }public static void selectSort(int[] arr){//把最大值放在首位置。for(int j = 0; j<arr.length-1; j++){  //  控制的是轮数。for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值if(arr[i]>arr[j]){//交换位置int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}              /*//把老二放在第二个位置for(int i = 2  ; i< arr.length ; i++){if(arr[i]>arr[1]){int temp = arr[i];arr[i] = arr[1];arr[1] = temp;}}//把老三放在第三个位置for(int i = 3  ; i< arr.length ; i++){if(arr[i]>arr[2]){int temp = arr[i];arr[i] = arr[2];arr[2] = temp;}}//把老四放在第四个位置for(int i = 4  ; i< arr.length ; i++){if(arr[i]>arr[3]){int temp = arr[i];arr[i] = arr[3];arr[3] = temp;}}               *///遍历数组,查看效果System.out.print("目前的元素:");for (int i = 0 ; i<arr.length  ;i++){System.out.print(arr[i]+",");}}



三、冒泡排序

需求3: 定义一个函数接收一个int类型的数组对象, 把数组中的最大值放在数组中的最后一位。
冒泡排序:冒泡排序的思想就是使用相邻的两个 元素挨个比较一次,符合条件交换位置。

原理:内循环结束一次,最值出现在尾角标位置。


public static void main(String[] args) {int[] arr = {12,8,17,5,9}; // 最大的索引值: 4   容量:5  bubbleSort(arr);}public static void bubbleSort(int[] arr){// 把最大值放在最后一个位置for(int j = 0 ; j<arr.length-1 ; j++){ //控制轮数for(int i = 0 ; i<arr.length-1-j  ; i++){  // 找出一个最大值  //相邻的元素比较if(arr[i]>arr[i+1]){int temp  = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}/*//把老二放在倒数第二个位置上。for(int i = 0 ;  i <arr.length-1-1 ; i++){if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}//把老三放在倒数第三个位置上。for(int i = 0 ;  i <arr.length-1-2 ; i++){if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}//把老四放在倒数第四个位置上。for(int i = 0 ;  i <arr.length-1-3 ; i++){if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}*///遍历数组,查看效果System.out.print("目前的元素:");for (int i = 0 ; i<arr.length  ;i++){System.out.print(arr[i]+",");}}



四、二分法

需求:定义一个函数接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在
数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。

折半查找法(二分法): 使用前提必需是有序的数组。


public static void main(String[] args) {int[] arr = {12,16,19,23,54};//int index = searchEle(arr,23);int index = halfSearch(arr,116);System.out.println("元素所在的索引值是:"+ index);}public static int halfSearch(int[] arr, int target){//定义三个变量分别记录最大、最小、中间的查找范围索引值int max = arr.length-1;int min = 0;int mid = (max+min)/2;while(true){if(target>arr[mid]){min = mid+1;}else if(target<arr[mid]){max = mid -1;}else{//找到了元素return mid;}//没有找到的情况if (max<min){return -1;}//重新计算中间索引值mid = (min+max)/2;}}public static int searchEle(int[] arr, int target){for(int i = 0 ; i<arr.length ; i++){if(arr[i]==target){return i;}}return -1;}



五、数组翻转

反转其实就是头角标和尾角标的元素进行位置的置换,然后在让头角标自增。尾角标自减。当头角标<尾角标时,可以进行置换的动作

需求: 定义 一个函数接收一个char类型的数组对象,然后翻转数组中的元素。

char[] arr = {'a','b','c','d','e'};

public static void main(String[] args) {//System.out.println("Hello World!");char[] arr = {'a','b','c','d','e'};reverse(arr);}public static void reverse(char[] arr){for(int startIndex = 0 ,endIndex = arr.length-1 ;   startIndex<endIndex ; startIndex++,endIndex--){char temp = arr[startIndex];arr[startIndex] = arr[endIndex];arr[endIndex] = temp;}//遍历数组,查看效果System.out.print("目前的元素:");for (int i = 0 ; i<arr.length  ;i++){System.out.print(arr[i]+",");}}



六、Arrays的使用

遍历: toString()    将数组的元素以字符串的形式返回

排序: sort()        将数组按照升序排列

查找: binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回(-插入点-1) 注意:使用查找的功能的时候,数组一定要先排序。




0 0
原创粉丝点击