java_day1

目标:Java web开发

给定你一个有约十万个数的整数数列,每个整数绝对值小于20亿。
请你在1秒内对这个数列按照从小到大进行排序,并将排好序的数列按顺序输出。

输入样例(5个数时):
5
3 1 2 4 5
输出样例:
1 2 3 4 5

/*
今天,是使用Java解决问题的开始。
我学会了简单的import导入,简单的输入输出,简单的函数编译,见识到Java强大的封装特性
*/
import java.util.*;//这里导入java.util家族,因为Scanner属于util家族
public class Main{//java是完全面向对象的语言
    public static void main(String[] args){//main函数后面的参数,在dos窗口输入
        Scanner sc=new Scanner(System.in);//用类建立对象。
        int n=sc.nextInt();//输入,整理,输出数据
        int[] a=new int[n];
        for(int i=0;i<n;i++) a[i]=sc.nextInt();
        q_sort(a,0,n-1);
        /*快速排序可以用冒泡排序代替,但解决这个问题需要运行10分钟
        for(int i=n-1;i>0;i--)
	        for(int j=0;j<i;j++)
	            if(a[j+1]<a[j]){
	                a[j]^=a[j+1];
	                a[j+1]^=a[j];
	                a[j]^=a[j+1];
	            }
        */
        //还可以用util包下的排序函数来实现,比q_sort()快:Arrays.sort(a,0,n);
        for(int i=0;i<n;i++) System.out.print(a[i]+" ");
    }
    public static void q_sort(int[] a,int l,int r){
        if(l==r) return;
        int mid=a[l+r>>1],i=l-1,j=r+1;
        while(i<j){
            while(a[++i]<mid);
            while(a[--j]>mid);
            if(i<j){
                a[i]^=a[j];
                a[j]^=a[i];
                a[i]^=a[j];
            }
        }
        q_sort(a,l,j);
        q_sort(a,j+1,r);
    }
}

posted @ 2021-07-01 11:04  zhuangzhongxu  阅读(51)  评论(0)    收藏  举报