十大排序介绍及经典排序

十大排序介绍

冒泡排序                  选择排序    插入排序                             复杂度  n*n
快速排序(pivot,quick)   堆排序      希尔排序(gap)    归并排序            复杂度n*logn
桶排序                    计数排序    基数排序                            复杂度  n---

其中主要需掌握的重要的有冒泡和计数排序,其他的需了解其排序原理即可。

1、冒泡排序

1、两两对比,往后挪用,最后最大的在末尾,如数组1,9,8,7,6,先对比1和9;
然后9放后面,再对比9和8,9继续放后面.....
package day07.work;
import java.util.Arrays;
public class HomeWork {
	public static void main(String[] args) {
		int[] nums = {8,4,6,9,2,7,5,9,4,6,3,120};
//5、利用冒泡排序对数据进行降序排序
		for(int i=0;i<nums.length-1;i++) {
		//该循环控制循环的轮数,即为需多少轮才能对比完,一次轮完送到头一个最大值;
			for(int j=0;j<nums.length-1-i;j++) {
		//内层循环控制每轮对比的次数,如三个数据对比两次,第一个数据若最大只需对比两次冒泡到最后,-1是最后一次无需再轮,已经在最前面了而且不-1会导致下标越界最后一次应该是 length-1下表和length-2下标作大小比较;
				if(nums[j]<nums[j+1]) {//前一个数小于后一个数,则互换,进行降序排序
					int temp=nums[j];
					nums[j]=nums[j+1];
					nums[j+1]=temp;
				}
			}
		}
		System.out.println("冒泡排序后的数组为"+Arrays.toString(nums));	
	}
}

冒泡排序由于其算法比较多余,占用线程时间特别长,一旦数据量大运行耗时特别长,几乎不怎么见到应用实例,但因其比较经典,所以需知道其原理并会编写该代码;
java中数组也自带有排序方法Arrays.sort(数组名,从哪个位置开始,到哪个位置结束);
该方法比冒泡排序快;

2、计数排序

计数排序只适用于明确知道范围的、固定范围内的整数排序;比如需要对一组年龄数据排序,明确知道人的年龄为(0,100】,(不要杠我的100岁)就定义一个100个长度的数组,依次存放1-100岁的各个年龄的人数,然后再还原出来数组,也可以得到每个范围(0-10】年龄人数占比之类的。

package week02.day08.test;

import java.util.Arrays;

public class CountSort {

	public static void main(String[] args) {
		int[] nums = {1,3,3,5,6,1,2,2,3,5,6,6,5,2,1,3,3,1};
		int[] counts = new int[6];//数值的最大值为几个,则定义count长度为几个
		for(int i=0;i<nums.length;i++) {
			counts[nums[i]-1]++;//算出count中下标为某个数的有多少个算出
		}
		//下面打印一下目前counts数组内容,还需要将其还原;
		System.out.println(Arrays.toString(counts));
		int a=0;//存放新数组的序号;
		for(int i=0;i<counts.length;i++) {//  循环录入某个值的动作 即外层循环控制多少种   循环录入某个值
			for(int j=0;j<counts[i];j++) {
				nums[a++] = i+1; //counts数组的i下标的值 代表的是在nums数组中有下标i的值这样多的i+1的值;
				//比如counts  0下标值为5,说明nums中有5个 0+1=1的值所以这里值为i+1;
			}
		}
		System.out.println(Arrays.toString(nums));
	}
}

3、选择排序

选择排序思想是将先循环找到数组中最小(最大都行,看自己升序或降序)的数值,将它放置到第一个元素位置,然后再循环剩下的找到最小那个,再放置到第二个位置,以此循环。它的思想和冒泡排序很像,只是它过程中记录每次循环的最小值下标,循环一次后再将目前循环到的第一个位置去互换;

package week02.day07.sort;

import java.util.Arrays;

public class Choosesort {
//选择排序
	public static void main(String[] args) {
		int[] nums = {1,6,87,45,234,21,4,128,2};
		for(int i=0;i<nums.length-1;i++) {
			int minIndex = i;
			for(int j =i+1;j<nums.length;j++) {
				if(nums[minIndex]>nums[j]) {
					minIndex = j;
				}
			}
			int temp =nums[minIndex];
			nums[minIndex] =nums[i];
			nums[i] = temp;
		}
		System.out.println(Arrays.toString(nums));
		
	}
}

4、插入排序

插入排序思想是将前面的看成是已有序的数组,后面循环一个去前面里找位置然后插入;

5、快速排序

6、堆排序

7、希尔排序

8、归并排序

9、桶排序

中心思想是按范围划分进桶,比如一组数据0-100,我分成10个桶,每个桶存放10个范围内数据,然后在每个桶进行排序;

10、基数排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落日晓余晖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值