排序(二)

桶排序

不是基于比较的排序

时间复杂度 O(N)

1、计数排序

员工按照身高排序

100-300建立桶

将员工按照身高放入桶中,依次倒出员工,便是以按身高排好序

2、基数排序

eg:23 14 101 72 84 11

步骤:

1)将数字位数统一

023 014 101 072 084 011

2)建立0-9 10个桶

按个位数比较,进入相应的桶

1:101、011

2:072

3:023

4:014、 084

5

6

7

8

9

3)依次倒出每个桶中元素

101 011 072 023 014 084

4)根据十位数进入相应的桶

0 :101

1:011、014

2:023

3

4:

5

6

7:072

8:084

9

5)依次倒出每个桶中元素

101 011 014 023 072 084

6)根据百位数进入相应的桶

0:011 014 023 072 084

1:101

7)最后倒出序列则是有序序列

011 014 023 072 084 101

public static void radixSort(int[] a)
	{
		
		int max = Integer.MIN_VALUE;
		for(int i=0;i<a.length;i++)
		{
			if(a[i]>max)
			{
				max=a[i];
			}
		}
		int maxLength=(max+"".length());
		//用于存储临时数据的数组
		int [][] temp=new int[a.length][a.length];
		//用于记录在temp中相应数组中存放数字的数量
		int[] counts=new int[10];
		for(int i=0,n=1;i<maxLength;i++,n*=10)	
		{
			//每个数字分别计算余数
			for(int j=0;j<a.length;j++)
			{
				int ys=a[j]/n%10;
				temp[ys][counts[ys]]=a[j];
				counts[ys]++;
			}
			int index=0;
			for(int k=0;k<counts.length;k++)
			{
				if(counts[k]!=0)
				{
					for(int l=0;l<counts[k];l++)
					{
						a[index]=temp[k][l];
						index++;
					}
					counts[k]=0;
				}
			}
			
		}
		
	}

 

 

--------------------------------------------------------------------------------------------------------------------

排序算法空间复杂度总结:
O(1):插入排序、选择排序、冒泡排序、堆排序、希尔排序

O(logN)- O(N):快速排序

O(N):归并排序

O(M):基数排序、基数排序

------------------------------------------------------------------------------------------------------------

算法稳定性:

稳定排序:冒泡排序、插入排序、归并排序、计数排序、基数排序、桶排序

不稳定排序:选择排序、快速排序、希尔排序、桶排序

选择排序不稳定举例:

2(1) 2(2) 2(3) 1

1 2(2) 2(3) 2(1)

快速排序不稳定例子:

4  3(1) 3(2) 3(3) 5                 3(2)划分值

3(1) 3(3) 3(2) 4 5

希尔排序不稳定

5 1(1) 1(2) 5            步长为2

1(2) 1(1) 5 5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值