编写一个程序,用选择法对数组a[]={20,10,55,40,30,70,60,80,90,100}进行从大到小的排序

2024-11-29 18:55:22
推荐回答(3个)
回答1:

public class wan {

/**
* @param args
*/
public static void main(String[] args) {
/*选择排序
思路:
1.定义一个循环,控制要排列的次数,每次搞定一个最大数
假设用i来代表每次最大数摆放的位置,i的取值:0~length-2
2.定义一个变量pos记住最大数所在的位置,定义一个变量max记住最大数
max初始值为i位置的元素,pos初始值为i
3.定义一个内层循环,用于遍历数组找最大数
假设i位置的最大,找出i+1~length-1里面最大的比i还大的
遍历数组,如果有比max大的,将值给max,同时用pos记住该元素的角标
4.让最大数和i位置的元素交换
*/
int[] arr = {20,10,55,40,30,70,60,80,90,100};
System.out.println("排序前:");
listArr(arr);
System.out.println("排序后:");
sort(arr);
listArr(arr);
}

private static void sort(int[] arr) {
for(int i=0; i int pos = i;
int max = arr[i];

for(int j=i+1; j if(arr[j]>max)
{
max = arr[j];
pos = j;
}
}
exchange(arr, i, pos);
}
}

private static void exchange(int[] arr, int pos1, int pos2) {
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;

}
static void listArr(int[] arr){
StringBuffer sb = new StringBuffer();
for(int i=0; i sb.append(arr[i] + ",");
sb.delete(sb.length()-1, sb.length());
System.out.println(sb);
}

}

回答2:

#include"stdio.h"
void main(){
int a[]={20,10,55,40,30,70,60,80,90,100},i,j;
for(i=0;i<10;i++){
if(a[i] j=a[i+1];
a[i+1]=a[i];
a[i]=j;
}
}

for(i=0;i<10;i++)
printf("%d",a[i]);

}

回答3:

void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i {k=i;
for(j=i+1;j if(array[j]>array[k])k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}
void main(){
int i;
int a[]={20,10,55,40,30,70,60,80,90,100};
sort(a,10);
for(i=0;i<10;i++){
printf("%d\n",a[i]);
}
}