当前位置:编程学习 > JAVA >>

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

RT:整型数组,最大值与数组第一个值交换,最小值与最后一个值交换
前两天在网上看到一道题比较有意思,有个容易被疏忽的地方,Ok,要求如题,代码如下:
[java]  
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] + "");  
        }  
    }  
  
}  
 
最后控制台的输出结果如下:
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,