当前位置:   article > 正文

【数据结构与算法】(JAVA版)8大排序算法带图文解说,选择排序,冒泡排序,插入排序,希尔排序,快速排序,归并排序,基数排序,堆排序_数据结构java各类排序算法比较分析一览图片

数据结构java各类排序算法比较分析一览图片

排序算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cTwqfjEg-1652773993433)(D:\Desktop\Java\imag\排序.png)]
常见排序列表:
在这里插入图片描述

1.冒泡排序(Bubble Sorting)
package queue;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class Demo3 {
   
	public static void main(String[] args) {
   
		//-----------------------------------------------普通测试
//		int[] num = {5,2,6,7,8,10};
//		System.out.println("排序前");
//		System.out.println(Arrays.toString(num));
//		int[] array = bubbleSort(num);
//		System.out.println("排序后");
//		System.out.println(Arrays.toString(array));
		//-----------------------------------------------向数组中添加多个(80000)数据测试排序时间
		int[] arr = new int[80000];
		for(int i=0;i < 80000;i++) {
   
			arr[i] = (int)(Math.random()*80000);
		}
		Date time1 = new Date();
		//时间格式化
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String timePre = sdf.format(time1);
		System.out.println("排序前的时间是:"+timePre);
		//调用排序算法
		bubbleSort(arr);
		Date time2 = new Date();
		String timeNex = sdf.format(time2);
		System.out.println("排序后的时间是:"+timeNex);
		/**
		 * 由此测试可以看出,冒泡排序的时间复杂度比较高
		 * 排序前的时间是:2022-03-21 14:47:55
	     * 排序后的时间是:2022-03-21 14:48:27
		 * */
	}
	public static int[] bubbleSort(int[] num) {
   
		boolean flag = true;
		int temp=0;
		for(int i=0;i < num.length-1;i++) {
   //或i = num.length-1;i>0;i--
			for(int j=0;j < num.length-i-1;j++) {
   //或j=0;j<i;j++
				if(num[j] > num[j+1]) {
   
					flag = false;
					temp = num[j];
					num[j] = num[j+1];
					num[j+1] = temp;
				}
			}
//			System.out.println("第"+(i+1)+"趟排序结果:");
//			System.out.println(Arrays.toString(num));
			/**
			 * 这里的flag判断的作用是,优化时间复杂度
			 * 当传入一个只需要走两三步就可完成排序的数组时,如:[5,2,6,7,8,10]
			 * 只需要循环一次就可以得到最终的结果
			 * */
			if(flag) {
   
				break;
			}else {
   
				flag = true;//重置flag为true,如果执行到这里说明元素发生过交换。flag已经为false。
			}
		}
		return num;
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
2.选择排序(select sorting)

思路:每次从后面选择最小的放在当前区间的前面

第一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换, 第二次从arr[1]~arr[n-1]中选取最小值,与arr[1]交换, 第三次从arr[2] arr[n-1]中选取最小值,与arr[2]交换, .,第i次从arr[i-1]' arr[n-1]中选取最小值,与arr[i-1]交换,..第n-1次从arr[n-2]^ arr[n-1]中选取最小值,与arr[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
  • 1

代码演示:

package dataStructure;
import java.text.SimpleDateFormat;
//选择排序
import java.util.Arrays;
import java.util.Date;

public class SelectSorting {
   
	public static void main(String[] args) {
   
		//------------------------------------------------普通测试
//		int[] arr = {5,8,3,9,10};
//		selectSort(arr);
//		System.out.println("排序后:"+Arrays.toString(arr));
		//------------------------------------------------测试多个数据的时间复杂度
		int[] arr = new int[80000];
		for(int i=0;i < 80000;i++) {
   
			arr[i] = (int)Math.random()*80000;
		}
		Date time1 = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//日期格式化
		System.out.println("测试前时间:"+sdf.format(time1));
		
		selectSort(arr);
		
		Date time2 = new Date();
		System.out.println("测试后时间:"+sdf.format(time2));
		/**
		 * 测试前时间:2022-03-21 14:46:25
		 * 测试后时间:2022-03-21 14:46:26
		 * 同样测试80000个数据,选择排序的时间复杂度要低于冒泡排序
		 * */
	}
	public static void selectSort(
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/835084
推荐阅读
相关标签
  

闽ICP备14008679号