program:
将一个数组的最大元素与第一个元素交换,最小元素与最后一个元素交换
代码如下:
1 /* 2 * 求解:将一个数组的最大元素与第一个元素交换,最小元素与最后一个元素交换 3 * 4 * Date Written:2017-11-12 5 * 6 * */ 7 8 package test; 9 10 public class TestDemo { 11 12 public static void main(String args[]) { 13 14 int[] nums = {3,6,1,8,0,2,9,2,5}; //自定义数组 15 16 operate(nums); //调用算法,实现数组的操作 17 display(nums); //打印数组 18 } 19 20 public static void operate(int[] nums) { 21 22 int maxIndex = 0; //存放最大值下标,初始值为0 23 int minIndex = nums.length - 1; //存放最小值下标,初始值为最后一个值下标 24 boolean flag = false; //记录最大值和最小值的下标初始值是否发生变化,若果变化,则不进行swap()操作 25 26 /* 27 * 因为上面最大和最小下标初始值的缘故,所以循环从第二个元素开始到倒数第二个元素结束 28 * */ 29 for( int i = 1; i < nums.length-1; i++ ) { 30 31 if( nums[i] > nums[maxIndex] ) { //记录最大值下标 32 33 maxIndex = i; 34 flag = true; 35 } 36 37 if( nums[i] < nums[minIndex] ) { //记录最小值下标 38 39 minIndex = i; 40 flag = true; 41 } 42 } 43 44 if( flag ) { //如果最大值不在第一位且最小值不在最后一位,就进行交换 45 swap(nums, maxIndex, minIndex); 46 } 47 48 } 49 50 /* 51 * 根据最大值和最小值的下标,将最值元素移动到相应的位置 52 * */ 53 public static void swap(int[] nums,int maxIndex,int minIndex) { 54 55 int temp = 0; 56 if( maxIndex != 0 ) { //最小值交换 57 58 temp = nums[maxIndex]; 59 nums[maxIndex] = nums[0]; 60 nums[0] = temp; 61 } 62 63 if( minIndex != nums.length - 1 ) { //最大值交换 64 65 temp = nums[minIndex]; 66 nums[minIndex] = nums[nums.length-1]; 67 nums[nums.length-1] = temp; 68 } 69 70 } 71 72 //打印数组 73 public static void display(int[] nums) { 74 75 for( int i = 0; i < nums.length; i++ ) { 76 77 System.out.print(nums[i] + " "); 78 } 79 } 80 81 82 }