比较常见的算法:冒泡排序、选择排序、插入排序、快速排序。具体实现如下:
public class SortUtil { public static void main(String[] args) { int[] a={32,12,3,45,31,30,5,1,40}; //InsertSort(a); //BubbleSort(a); //SelectSort(a); QuickSort(a, 0, a.length-1); printData(a); } /** * 快速排序 * @param a * @param low * @param high */ public static void QuickSort(int[] a,int low,int high){ if(low < high){ int middle = GetMiddle(a, low, high); QuickSort(a, 0, middle-1); QuickSort(a, middle+1, high); } } /** * 获取分隔下标 * @param a * @param low * @param high */ public static int GetMiddle(int[] a,int low,int high){ if(low < high){ int temp = a[low]; while(low<high){ while(low < high && temp < a[high]){ high--; } a[low]=a[high]; while(low<high && temp > a[low]){ low++; } a[high]=a[low]; } a[low]=temp; } return low; } /** * 选择排序 * 原理:一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最开始的位置。 * 1)在未排序数组中找到最小元素,存放到排序序列的起始位置; * 2)再从剩余的未排序的数组中继续寻找最小的元素,然后放到排序数组的末尾; * 3)以此类推,直到数组所有元素排序完毕。 * @param a */ public static void SelectSort(int[] a){ for(int i=0;i<a.length-1;i++){ int min=a[i]; int index = i; for(int j=i+1;j<a.length;j++){ if(min > a[j]){ min=a[j]; index=j; } } int temp = a[index]; a[index]=a[i]; a[i]=temp; } } /** * 冒泡排序 * 比较相邻的两个元素,如果第一个比第二个大,则交换两个元素的位置 * 对每一对相邻的元素做如上的操作,比较结束后,最大的元素会被移动到最后。 * 再次遍历时,最后一个元素不用参与比较了,此时数组的长度减1, * 针对剩余的元素重复上述步骤,直到剩余数组的长度为0; * @param a */ public static void BubbleSort(int[] a){ for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1-i;j++){ if(a[j]>a[j+1]){ int temp = a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } /** * 插入排序 * 原理:通过构建有序数据,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 * 1)默认该数组已经是有序的; * 2)从下标1开始,取出下标1的值,在已排序的数组中,从当前下标开始,从后向前扫描; * 3)如果该元素小于新元素,将新元素向后移动一个位置; * 4)重复步骤3,直到找到该元素大于新元素或已扫描到开始端; * 5)将该元素插入到新位置中; * 6)下标加1,重复步骤2; * @param a */ public static void InsertSort(int[] a){ for(int i=1;i<a.length;i++){ int j=i; int min=a[i]; while(j>0 && min < a[j-1]){ a[j]=a[j-1]; j--; } a[j]=min; } } /** * 打印数组 * @param a */ private static void printData(int[] a){ for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println(); } }