博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java通过几种经典的算法来实现数组排序
阅读量:7033 次
发布时间:2019-06-28

本文共 3571 字,大约阅读时间需要 11 分钟。

hot3.png

Java实现数组排序

 

     冒泡排序
     基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
     直接插入排序
     基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序
     快速排序
     基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
     简单选择排序
     基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
 

package com.souvc.hibernate.exp; public class MySort {     public static void main(String[] args) {        int array[] = {45,32,54,12,43,65,11,3,43,6,33,90,44,1,178};        MySort mySort = new MySort();        mySort.insertSort(array);        System.out.print("插入排序结果 :  ");        mySort.printArray(array);        System.out.println();        mySort.bubbleSort(array);        System.out.print("冒泡排序结果 :  ");        mySort.printArray(array);        mySort.qsort(array);        System.out.println();        System.out.print("快速排序结果 :  ");        mySort.printArray(array);        mySort.shellSort(array);        System.out.println();        System.out.print("希尔排序结果 :  ");        mySort.printArray(array);        mySort.selectSort(array);        System.out.println();        System.out.print("选择排序结果 :  ");        mySort.printArray(array);    }         /**     * 直接插入排序     * 基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序     */    public void insertSort(int[] array){        int temp=0;          for(int i=1;i
=0&&temp
array[j+1]){ temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } } /** * 快速排序 * 基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。 * @param array */ public void qsort(int array[]){ if(array.length>1){ _qsort(array,0,array.length-1); } } /** * 一趟快速排序 * @param array */ private void _qsort(int[] array,int low,int high){ if(low < high){ int middle = getMiddle(array, low, high); _qsort(array,low,middle-1); _qsort(array, middle+1, high); } } /** * 得到中间值 */ private int getMiddle(int[] array,int low,int high){ int tmp = array[low]; while(low < high){ while(low < high && array[high] >= tmp) high--; array[low] = array[high]; while(low
=0&&temp

递归实现冒泡算法

(递归就是将重复的方法体提取出来)

package com.colin; /** *  * @author Colin Yan *  */public class BubbleSort { 	/** 时间复杂度 */	private static int timeComplexity; 	public static final int INDEX_BEGIN = 0; 	/**	 * 	 * @param arr	 * @param index	 *            [0, arr.length-2]	 */	public static void sort(int arr[], int index) {		System.out.println("index:" + index);		for (int i = arr.length - 1; i > index; i--) {			timeComplexity++;			if (arr[i] < arr[i - 1]) {				arr[i] ^= arr[i - 1];				arr[i - 1] ^= arr[i];				arr[i] ^= arr[i - 1];			}		}		if (index < arr.length - 2) {			sort(arr, ++index);		}	} 	private static int calcByFormula(int n) {		return (n - 1) * (n) / 2;	} 	public static void main(String[] args) { 		int arr[] = new int[] { 3333, 1, 2, 34, 2, 67, 889, 56 };		sort(arr, INDEX_BEGIN);		System.out.println("排序数组长度n为:" + arr.length);		System.out.println("公式计算时间复杂度:" + calcByFormula(arr.length));		System.out.println("实际计算时间复杂度:" + timeComplexity); 		for (int i : arr) {			System.out.println(i);		}	} }

 

转载于:https://my.oschina.net/u/3908739/blog/2239708

你可能感兴趣的文章
桌面支持--DWG 2010调节背景颜色
查看>>
docker容器的运行以及概述
查看>>
Liferay中portlet.xml中安全控制
查看>>
Apache CXF学习 - SOAP Handler的使用
查看>>
我的友情链接
查看>>
用R抓取主要货币对实时汇率
查看>>
Mybatis一对一和一对多配置
查看>>
设计模式学习一
查看>>
EasyPoi教程
查看>>
mybatis 转义对照表
查看>>
myeclipse部署到tomcat WEB-INF\classes中为空
查看>>
比特币钱包RPC的PHP调用方法
查看>>
阿里云发布云安全中心,普惠云原生安全能力
查看>>
Linux文件、目录管理(上)
查看>>
STOCHRSI 指标理解
查看>>
一线互联网公司是怎么处理mysql事务以及隔离级别的?
查看>>
df命令、du命令 、磁盘分区
查看>>
简述vue状态管理模式之vuex
查看>>
JAVA RPC:从上手到爱不释手
查看>>
深入MyBatis源码,理解Java设计模式之适配器模式
查看>>