排序(冒泡、桶排序、快速)(java)

本文介绍了排序算法中的冒泡排序、桶排序和快速排序。冒泡排序适合小规模数据,时间复杂度为O(N²)。桶排序利用容器进行排序,适合数据范围较小的情况。快速排序采用递归思想,平均时间复杂度为O(N log N)。
摘要由CSDN通过智能技术生成

每一个项目中基本都会用到排序,如成绩排名等等,可见排序的重要性,每一种排序方法都有自己的特点,在选择用哪一种排序的时候,要根据数据的多少以及效率、资源占用等问题考虑,排序有多种,比如冒泡排序、二分排序、快速排序、桶排序、堆排序等等,在这里主要给大家接受一下冒泡排序与桶排序以及快速排序。

冒泡排序

冒泡排序是比较典型的一个排序,大家在第一次接触排序时一般都是冒泡排序,冒泡排序的思想就是把大数或小数沉下去,从而完成排序。先给大家看一下源码

package sort;

public class maopao {

	public static void main(String[] args) {
		int []a=new int[10];                                      //给数组赋值,大家也可以通过Scanner从控制台输入要排序的数字
		int m;
		for(int i=0;i<10;i++) {
			a[i]=i;
		}
		for(int k=0;k<a.length;k++) {                                 //需要给多少个数排序
			for(int p=0;p<a.length-1;p++) {                         //每次需要比较多少次
				if(a[k]>=a[p]) {                                              //比较
					m=a[k];
					a[k]=a[p];                                                  //两个数互相交换
					a[p]=m;
				}
			}
		}
		for (int i:a) {
			System.out.println(i);                                        //最后遍历数组,完成排序
		}
	}

}

冒泡排序的思想就是大数向下沉,或者小数往下沉,冒泡排序的时间复杂度为O(N²),时间复杂度较高,冒泡排序在数量较少时使用比较合适,当数量很大时,不建议使用冒泡排序,太浪费时间。
在这里插入图片描述
比如这几个数,先拿第一个数与第二个数比较,3<7,不需要交换,然后7与4比较,7>4交换位置
在这里插入图片描述
然后7与9进行比较,7<9,不需要交换;然后还剩几个数没比较,按照上边的方法试试看吧。
然后冒牌排序就先到这里。接下来介绍下一种。

桶排序

对于桶排序大家可能没有听说过,但桶排序有它自己的优点,比较好理解,让我们来了解一下桶排序吧。桶,可以理解成一个容器,桶排序顾名思义就是利用一些容器进行排序,它就是利用这一原理进行排序的,然后来看一下源码。

package sort;

import java.util.Scanner;

public class TSort {
	public static void main(String[] args) {
		System.out.println("请输入要排序的数量");
		Scanner sn=new Scanner(System.in);
		int number=sn.nextInt();
		System.out.println("请输入要排序中的最大数");
		int max=sn.nextInt();
		int []array=new int[max+1];
		for(int j=0;j<array.length;j++) {
			array[j]=0;                                                          //定义容器,也就是桶
		}
		System.out.println("请输入要排序的数");
		for(int i=0;i<number;i++) {
			int numbers=sn.nextInt();                                
			array[numbers]++;                                              //表示有numbers这个数放到了array[numbers]里,array[numbers]+1
		}
		sn.close();
		for(int j=0;j<array.length;j++) {
			for(int i=1;i<=array[j];i++) {                           //将有添加进来的数,按顺序输出出去
				System.out.println(j);                            
			}
		}

	}
	}

桶排序是准备一个连续的数组作为容器,若有数添加进来,则在定义的容器数组相应的地方自加一次,然后添加进来的数相应的数组上的数应该是>=1的,然后依次输出即可。这个方法的弊端已经明显了吧,就是当你要给一个特别大的数进行排序时,需要建立一个特别大的数组,并且还要浪费很多空间,所以当要排序的数很大时,不建议使用这一种方法

快速排序

快速排序大家可能听说过,这种方法用的也比较多,使用这种方法会用到递归这种思想,递归,就是写一个方法然后自己调用自己,设置一个退出条件,完成操作。老规矩,先看源码

package sort;

import java.util.Scanner;

public class QuikSort {
	public static void quickSort(int[] arrars,int left,int right){
	        int i,j,temp,t;
	        if(left>right){
	            return;
	        }
	        i=left;
	        j=right;
	        //temp就是基准位
	        temp = arrars[left];
	 
	        while (i<j) {
	            //先看右边,依次往左递减
	            while (temp<=arrars[j]&&i<j) {
	                j--;
	            }
	            //再看左边,依次往右递增
	            while (temp>=arrars[i]&&i<j) {
	                i++;
	            }
	            //如果满足条件则交换
	            if (i<j) {
	                t = arrars[j];
	                arrars[j] = arrars[i];
	                arrars[i] = t;
	            }
	 
	        }
	        //最后将基准为与i和j相等位置的数字交换
	        arrars[left] = arrars[i];
	        arrars[i] = temp;
	        //递归调用左半数组
	        quickSort(arrars, left, j-1);
	        //递归调用右半数组
	        quickSort(arrars, j+1, right);
	    }
	    public static void main(String[] args){
	        int[] arrays = {10,7,2,4,7,62,3,4,2,1,8,9,19};
	        quickSort(arrays, 0, arrays.length-1);
	        for (int i = 0; i < arrays.length; i++) {
	            System.out.println(arrays[i]);
	        }
	    }
	
//}
}

快速排序的思想是,把这些数放到数组中,先拿出一个数,一般拿第一个数,给这个数找到相应的位置,但是这个位置比较特别,要求比这个数小的数放到它的左边,比它大的数放到这个数的右边,由此需要设置一个左边和一个右边的数,退出条件就是左边的标号大于右边的标号,因为再比下去没有任何意义,浪费时间空间

thanks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值