做这道题只为练排序。八大排序算法,写过冒泡排序,快速排序,插入排序以及归并排序的核心步骤。还写过一个计算名次的算法,也是排序。
代码:
package Test1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Test30_1034 {
/**
* by qr jobdu 1034 2014-8-18
* @throws IOException
*/
public static void main(String[] args) throws IOException {
StreamTokenizer st = new StreamTokenizer(new BufferedReader(
new InputStreamReader(System.in)));
int n,m;
while(true){
st.nextToken();
n=(int)st.nval;
st.nextToken();
m=(int)st.nval;
if(n==0 && m==0)
break;
int arr[]=new int[n];
for(int i=0;i<n;i++){
st.nextToken();
arr[i]=(int)st.nval;
}
insertSort(arr,n);
int k=Math.min(m, n);
for(int i=0;i<k-1;i++){
System.out.print(arr[i]+" ");
}
System.out.println(arr[k-1]);
}
}
private static void insertSort(int[] arr, int n) { //排序前k个 从大到小排序
for(int i=1;i<n;i++){
if(arr[i]>arr[i-1]){ //如果大,则排序,否则不排
int temp=arr[i];
int j=i-1;
while(j>=0 && temp>arr[j] ){ //先判断j是否为负数,否则报错
arr[j+1]=arr[j];
j--;
}
arr[j+1]=temp;
}
}
}
}