Java排序算法经典实现(冒泡、快速、选择、插入)

12 篇文章 0 订阅
11 篇文章 1 订阅
    package com.luna.sort;
	public class JavaSort {
		public static void main(String[] args) {
			int a[] = { 10, 1, 8, 20, 9, 67, 73, 91 };
	        //	bubbleSort(a);
	        //		
	        //	insertSort(a);
	        //		
	        //  selectSort(a);
			
			quickSort(a);
			System.out.println("快速排序结果:");
			for (int k = 0; k < a.length; k++) {
				System.out.print(a[k] + " ");
			}
			System.out.println();
		}

		/**
		 * 插入排序
		 * @param a
		 */
		public static void insertSort(int[] a) {
			int i, j, insertNote;// 要插入的数据
			for (i = 1; i < a.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
				insertNote = a[i];// 设置数组中的第2个元素为第一次循环要插入的数据
				j = i - 1;
				while (j >= 0 && insertNote < a[j]) {
					a[j + 1] = a[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
					j--;
				}
				a[j + 1] = insertNote;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
			}
			System.out.println("插入排序结果:");
			for (int k = 0; k < a.length; k++) {
				System.out.print(a[k] + " ");
			}
			System.out.println();
		}
		
		/**
		 * 冒泡排序最好时间复杂度为O(n),即数组本身是正序;最差时间复杂度为O(n*n)
		 * @param array
		 */
		public static void bubbleSort(int []array){
			for (int i = 0; i < array.length - 1; i++){
				for (int j = 0; j < array.length - 1 - i; j++){
					if (array[j] > array[j + 1]) {
						int t = array[j];
						array[j] = array[j + 1];
						array[j + 1] = t;
					}
				}
			}
			System.out.println("冒泡排序结果:");
			for (int i = 0; i < array.length; i++) {
				System.out.print(array[i] + " ");
			}
			System.out.println();
		}
		
		/**
		 * 选择排序算法
		 * @param arr
		 */
		public static void selectSort(int[] arr) {
			if (arr == null || arr.length < 2) {
				return;
			}
			int index;// 定义下标
			for (int i = 0; i < arr.length; i++) {
				index = i;// 初始下标为i
				for (int j = i + 1; j < arr.length; j++) {
					if (arr[j] < arr[index]) {
						index = j;
					}
				}
				if (index != i) {
					int temp = arr[index];
					arr[index] = arr[i];
					arr[i] = temp;
				}
			}
			
			System.out.println("选择排序结果:");
			for (int i = 0; i < arr.length; i++) {
				System.out.print(arr[i] + " ");
			}
			System.out.println();
		}
		
		/**
		 * 快速排序
		 * @param a
		 * @param low
		 * @param hight
		 */
		public static void sort(int a[], int low, int hight) {
			int i, j, index;
			if (low > hight) {
				return;
			}
			i = low;
			j = hight;
			index = a[i]; // 用子表的第一个记录做基准
			while (i < j) { // 从表的两端交替向中间扫描
				while (i < j && a[j] >= index)
					j--;
				if (i < j)
					a[i++] = a[j];// 用比基准小的记录替换低位记录
				while (i < j && a[i] < index)
					i++;
				if (i < j) // 用比基准大的记录替换高位记录
					a[j--] = a[i];
			}
			a[i] = index;// 将基准数值替换回 a[i]
			sort(a, low, i - 1); // 对低子表进行递归排序
			sort(a, i + 1, hight); // 对高子表进行递归排序
		}
		public static void quickSort(int a[]) {
			sort(a, 0, a.length - 1);
		}
	}
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

抽离的心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值