排序小练习(桶,冒泡,快速)


import java.util.Scanner;
public class Main {
    static Scanner in =new Scanner(System.in);
    static final int N=1000;
    static int k;
    //桶排序:快速,时间复杂度小,可以用来去重(数量较小时),但是有局限,不能排序小数,不能排序结构体
     static void bool_sort(int[] a){
    	int[] bool=new int[N];
    	for (int i = 0; i < bool.length; i++)
			   bool[i]=0;
		for (int i = 0; i <k; i++) {
			   bool[a[i]]++;
			  }
	    for (int i = 0; i < bool.length; i++) {
			for (int j = 0; j<bool[i]; j++) {
					System.out.print(i+" ");
			  }			
		 }
    	System.out.println();
    }
    //冒泡排序,时间复杂度和初始序列有关
    static void bubble_sort(int[] a){
    	int t=0;
    	boolean flag=true;//用来判断若一趟过程中没有交换则直接退出循环即可
    	for (int i = 0; i < k&&flag; i++) {
			for (int j = 0; j <k-i-1; j++) {
				flag=false;
				if(a[j]>a[j+1]){
					flag=true;
					t=a[j];
					a[j]=a[j+1];
					a[j+1]=t;
				}
			}
		}
    	for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
    	System.out.println();
    }
    //选择排序(求解最值得时候一定要记得更新)
    static void chose_sort(int[] a){
    	int min=0,pos=0,t=0;
    	for (int i = 0; i <k-1; i++) {
    		min=a[i];
    		pos=i;
		   for (int j = i; j <k; j++) {
				if(a[j]<min){
					min=a[j];
					pos=j;
			   }
			}
		   //将最小值和最前面一位交换
		   t=a[pos];a[pos]=a[i];a[i]=t;
		}
    	for (int i = 0; i < a.length; i++) {
			System.out.print(a[i]+" ");
		}
    	System.out.println();
    }
    //快速排序
    static void quick_sort(int[] a,int left,int right){
    	if(left>right)//数组索引出界排除
    		return;
    	int i,j,t,temp;
    	i=left;
    	j=right;
    	temp=a[left];
    	while(i!=j){
    		while(a[j]>=temp&&i<j)
    			j--;
    		while(a[i]<=temp&&i<j)
    			i++;
    		if(i<j){
    			t=a[j];
    			a[j]=a[i];
    			a[i]=t;
    		}
    	}
    	a[left]=a[i];
    	a[i]=temp;
    quick_sort(a, left, i-1);  
    quick_sort(a, i+1, right);
    }
	public static void main(String[] args) {
		while(in.hasNext()){
	     k=in.nextInt();
	     int[] a=new int[k];
	     for (int i = 0; i < k; i++)
			 a[i]=in.nextInt();
	     System.out.println("桶排序:");
	       bool_sort(a); 
	     System.out.println("冒泡排序:");
	       bubble_sort(a);
	     System.out.println("快速排序:");
	       quick_sort(a,0,k-1);
	     for (int i = 0; i < a.length; i++) 
			System.out.print(a[i]+" ");
	     System.out.println();
	     System.out.println("选择排序:");
	         chose_sort(a);
		}


	}


}


此处我再附上我写的直接插入排序和归并排序算法的链接:http://blog.csdn.net/jinglelia/article/details/77004542

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值