java冒泡排序,选择排序,插入排序,希尔排序
生活随笔
收集整理的這篇文章主要介紹了
java冒泡排序,选择排序,插入排序,希尔排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
沒兩天又忘了,再寫一遍。
import java.util.Arrays;/*** Description:* Created by quxiaozha on 2018-9-1, 43, 567.*/ public class Sort {public static void main(String[] args) {int[] arr1 = {32, 43, 23, -13, 11, 14, 2, 13, 43, 15, 0, 56, 27, 18, 32, 2};int[] arr2 = {32, 43, 23, -13, 11, 14, 2, 13, 43, 15, 0, 56, 27, 18, 32, 2};int[] arr3 = {32, 43, 23, -13, 11, 14, 2, 13, 43, 15, 0, 56, 27, 18, 32, 2};int[] arr4 = {32, 43, 23, -13, 11, 14, 2, 13, 43, 15, 0, 56, 27, 18, 32, 2};printArr("origin", arr1);printArr("selectionSort Complete", selectionSort(arr1));printArr("bubbleSort Complete", bubbleSort(arr2));printArr("insertionSort Complete", insertionSort(arr3));printArr("shellSort Complete", shellSort(arr4));}/*** @Author quxiaozha* @Description 冒泡排序 依次比較相鄰兩個元素的大小,將小的放在左邊,第一輪排序后,最小的元素就到了第一位,然后依次* 對其余元素重復上面的操作,這樣小元素就不停的冒上來,最后排序完成。* @Date 14:27 2018-9-17* @Param [arr]* @return int[]**/public static int[] bubbleSort(int[] arr) {long start,end;start=System.nanoTime();int tmp;for (int i = 0; i < arr.length; i++) {boolean flag = true;for (int j = arr.length - 1; j > i; j--) {if (arr[j] < arr[j - 1]) {tmp = arr[j];arr[j] = arr[j - 1];arr[j - 1] = tmp;flag = false;}} // printArr(i+1+"",arr);if (flag) { // System.out.println("ok");break;}}end=System.nanoTime();System.out.println("bubbleSort duration: "+(end-start)+" ns");return arr;}/*** @Author quxiaozha* @Description 選擇排序,執行第i次遍歷時,將arr[i]與arr[i+1]及之后的數據進行比較,找到最小的元素,并交換位置。* 第i次遍歷完成后,arr[i]即為本輪最小的元素。* @Date 10:10 2018-9-17* @Param [arr]待排序數組* @return int[]排序后的數組**/public static int[] selectionSort(int[] arr) {long start,end;start=System.nanoTime();int minIndex,tmp;for (int i = 0; i < arr.length; i++) {minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[minIndex] > arr[j]) {minIndex = j;}}tmp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = tmp; // printArr(String.valueOf(i + 1), arr); }end=System.nanoTime();System.out.println("selectionSort duration: "+(end-start)+" ns");return arr;}/*** @Author quxiaozha* @Description 插入排序,從0開始,每次遍歷保證前面的n個元素時有序狀態,后面循環中每次取一個元素,插入到前面已經有序的* 數組中,具體方式是將當前元素與已排序的元素從大大小依次比較,如果當前元素比已排序的元素小時,將原來已經* 有序的元素往后移一位,給新元素挪一個“坑”,然后繼續往前比較,一路將“坑”前移,直到找到當前元素比已排序數* 組大的元素為止,最后將當前元素填到上面留出來的那個坑中即可。* @Date 10:25 2018-9-17* @Param [a]* @return int[]**/public static int[] insertionSort(int[] a) {long start,end;start=System.nanoTime();int tmp;for (int i = 1; i < a.length; i++) { // for (int j = i; j > 0 && a[j] < a[j - 1]; j--) { // tmp = a[j]; // a[j] = a[j - 1]; // a[j - 1] = tmp; // }tmp = a[i];int j = i - 1;while (j >= 0 && a[j] > tmp) {a[j + 1] = a[j];j--;}a[j + 1] = tmp; // printArr(String.valueOf(i), a); }end=System.nanoTime();System.out.println("insertionSort duration: "+(end-start)+" ns");return a;}/*** @Author quxiaozha* @Description 希爾排序 將數組按照步長分組,對每組分別排序,然后減小步長,重新分組,對每個分組進行插入排序,直到步長* 為1則排序完成。* @Date 10:26 2018-9-17* @Param [a]* @return int[]**/public static int[] shellSort(int[] a){long start,end;start=System.nanoTime();int h = a.length/2;int tmp;while (h >= 1){for (int i = 0; i < h; i++) {for (int j = i + h; j < a.length; j = j + h) {tmp = a[j];int k = j - h;while(k >= 0 && a[k]>tmp){a[k+h] = a[k];k = k - h;}a[k + h] = tmp;} // printArr(h + "-" + i + "", a); }h = h/2;}end=System.nanoTime();System.out.println("shellSort duration: "+(end-start)+" ns");return a;}public static void printArr(String prefix, int[] arr) {System.out.println(prefix + ":" + Arrays.toString(arr));}}?
轉載于:https://www.cnblogs.com/quxiaozha/p/sort.html
總結
以上是生活随笔為你收集整理的java冒泡排序,选择排序,插入排序,希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: #41 最短路(分治+线性基)
- 下一篇: 无限分类设计