求解JAVA编程题:编写一个程序选择法对数组a[]={20,10,50,40,30,70,60,80,90,100}进行由大到小的顺序

如题所述

/**
* 选择排序。
*
* @param ints
* 要排序的数组。
* @return 返回排序后的数组。如果数组为空或数组长度小于等于1,则直接返回传入的数组对象。
*/
public static int[] choose(final int[] ints)
{

if (ints == null)
{// 如果数组为空,不进行排序操作。
return ints;
}

int count = ints.length;// 数组的长度。

if (count <= 1)
{// 如果数组长度为小于等于1,没有排序的必要。
return ints;
}

int j = 0;// 用于循环中第二层循环的计数变量。
int minIndex = 0;// 最小数值的下标,用于循环中存放最小数的下标值。

// 假定第i数是余下数中最小的数。前边i-1个数已经排列好了。第一个数不需要计入选择的列表。
for (int i = 1; i < count; i++)
{
minIndex = i;// 假定当前循环起始值为余下数中最小的。
for (j = i + 1; j < count; j++)
{
if (ints[minIndex] > ints[j])
{
minIndex = j;// 如果假定的最小值大于当前数,则改变最小值下标的值。
}
}

if (ints[minIndex] < ints[i - 1])
{// 如果余下数中最小的数比假定的最小的数小,则交换位置。
swap(ints, i - 1, minIndex);
}
}

return ints;
}
/**
* 交换数组中的两个位置上的数据。如果数组的长度小于等于1、 要交换的下标比数组长度大或小等于0,则没有交换的意义。
*
* @param ints
* 要交换数据的数组。
* @param i
* 要交换的第一个位置。
* @param j
* 要交换的第二个位置。
*/
public static void swap(final int[] ints, final int i, final int j)
{

int count = ints.length;// 数组的长度

// 如果数组的长度小于等于1、i与j相等、i或j比数组的长度大或小于0,则没有交换的意义,直接返回。
if ((count <= 1) || (i == j) || (i <= -1) || (j <= -1) || (i >= count)
|| (j >= count))
{
return;
}

// 交换数组中的两个不同位置下标的值。
ints[i] += ints[j];
ints[j] = ints[i] - ints[j];
ints[i] -= -ints[j];
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-09
public class ArraySort
{ public void sortArr(int[] arr,int len)
{ int tem=0;
for(int i=0;i<len;i++)
{ for(int j=len-1;j>=i+1;j--)
{ if(arr[j]<arr[j-1])
{ tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}
}
}
}
public void print(int[]arr,int len)
{ for(int i=1;i<=len;i++)
{ System.out.print(arr[i-1]="\t");
}
}
}
第2个回答  2013-09-09
public class SortDemo {
public static void main(String[] args) {
int[] a = {20,10,50,40,30,70,60,80,90,100};
for (int i = a.length - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if(a[j] > a[j+1]){
int temp;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}

}
System.out.println(a[i]);
}

}

}