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); } } }