整型数组,最大值与数组第一个值互换,最小值与最后一个值交换

整型数组,最大值与数组第一个值交换,最小值与最后一个值交换

RT:整型数组,最大值与数组第一个值交换,最小值与最后一个值交换

前两天在网上看到一道题比较有意思,有个容易被疏忽的地方,Ok,要求如题,代码如下:

package org.wxp.sort;

import junit.framework.TestCase;

/**
 * 一个整型数组,将其中最大的值与数组的第一个值交换,最小的值与数组最后一个值交换 根据循环找出最大值和最小值以及它们在数组中的下标;根据下表来交换数据;
 * 重点:如果先交换最大值和第一个值,那么如果数组中第一个值为最小值时,后边交换最小值的时候,最小值的下标此时已经变了,因为刚才被最大值给交换了,
 * 此时要把最大值的下标付给最小值的下标,才能正常交换。反之亦然;
 * 
 * @author Champion.Wong
 * 
 */
public class Sort_01 extends TestCase {

	private int[] arr = { 1, 3, 5, 6, 4, 9, 7 }; // 定义一个数组

	public void test() {
		int max = 0, min = 0; // 最大值、最小值
		int i1 = 0, i2 = 0; // 最大值在数组中的下表,最小值在数组中的下标
		int temp = 0; // 用于数据交换

		max = min = arr[0]; // 默认最大值和最小值为数组的第一个值
		for (int i = 1; i < arr.length; i++) {
			if (max < arr[i]) { // 获取数组中最大值和最大值下标
				max = arr[i];
				i1 = i;
			}
			if (min > arr[i]) {
				min = arr[i];
				i2 = i;
			}
		}

		// 将最大值与数组的第一个值交换
		temp = arr[0];
		arr[0] = arr[i1];
		arr[i1] = temp;

		/*
		 * 如果数组的第一个值就是最小值,那么刚才在交换的过程中,已经被移动了位置, 那么目前最小值的位置就是刚才最大值的位置,即第一次移动的值的位置
		 */
		if (min == arr[i1]) {
			i2 = i1;
		}

		// 将最小值与数组的最后一个值交换
		temp = arr[arr.length - 1];
		arr[arr.length - 1] = arr[i2];
		arr[i2] = temp;

		System.out.println(max + "===" + min);
		System.out.println(i1 + "===" + i2);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + "");
		}
	}

}


最后控制台的输出结果如下:

整型数组,最大值与数组第一个值互换,最小值与最后一个值交换


不足之处,敬请指正!

转载请注明出处:http://blog.****.net/it_wangxiangpan/article/details/8700935