Java排序算法

    科技2022-07-13  137

    排序算法

    冒泡排序选择排序插入排序希尔排序桶排序快速排序

    冒泡排序

    for (int i = 0; i <arr.length-1; i++) { for (int j = 0,t; j < arr.length-i-1; j++) { if(arr[j]>arr[j+1]){ t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } } }

    选择排序

    for (int i = 0,maxIx,maxValIx,t; i <arr.length-1; i++) { maxIx=arr.length-1-i;//当前未排列元素数中最后一个空间下标 maxValIx=0;//当前最大值的下标 for (int j = 1; j <= arr.length-i-1; j++) { if(arr[j]>arr[maxValIx]){ maxValIx=j; } } if(maxValIx!=maxIx){//当前最大值未放在最后一个空间 t=arr[maxIx]; arr[maxIx]=arr[maxValIx]; arr[maxValIx]=t; } }

    插入排序

    for (int i = 1,t,j; i < arr.length; i++) { t=arr[i]; for ( j = i-1; j>=0&&arr[j] >=t; j--) { arr[j+1]=arr[j]; } arr[j+1]=t; }

    希尔排序

    int step=arr.length,t; while((step=step/2)>2){ for (int i = 0; i+step < arr.length; i++) { if(arr[i]>arr[i+step]){ t=arr[i]; arr[i]=arr[i+step]; arr[i+step]=t; } } } for (int i = 1,j; i < arr.length; i++) { t=arr[i]; for ( j = i-1; j>=0&&arr[j] >=t; j--) { arr[j+1]=arr[j]; } arr[j+1]=t; }

    桶排序

    final int U = 10; int[][]bucket = new int[U][arr.length]; int[] ixs = new int[U]; for (int i=1, count,t;;i*=10) { count = 0; for (int j = 0; j < arr.length; j++) { count = (t = arr[j] / i) >= 1 ? ++count : count; bucket[t %= U][ixs[t]++] = arr[j]; } if (count == 0) break; for (int j = 0, ix = 0; j < bucket.length; j++) { for (int k = 0; k < ixs[j]; k++) { arr[ix++] = bucket[j][k]; } } for (int j = 0; j < ixs.length; j++) { ixs[j] = 0; } }

    快速排序

    Processed: 0.011, SQL: 8