java冒泡排序,选择排序,插入排序,希尔排序
生活随笔
收集整理的這篇文章主要介紹了
java冒泡排序,选择排序,插入排序,希尔排序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
沒(méi)兩天又忘了,再寫(xiě)一遍。
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 冒泡排序 依次比較相鄰兩個(gè)元素的大小,將小的放在左邊,第一輪排序后,最小的元素就到了第一位,然后依次* 對(duì)其余元素重復(fù)上面的操作,這樣小元素就不停的冒上來(lái),最后排序完成。* @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 選擇排序,執(zhí)行第i次遍歷時(shí),將arr[i]與arr[i+1]及之后的數(shù)據(jù)進(jìn)行比較,找到最小的元素,并交換位置。* 第i次遍歷完成后,arr[i]即為本輪最小的元素。* @Date 10:10 2018-9-17* @Param [arr]待排序數(shù)組* @return int[]排序后的數(shù)組**/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開(kāi)始,每次遍歷保證前面的n個(gè)元素時(shí)有序狀態(tài),后面循環(huán)中每次取一個(gè)元素,插入到前面已經(jīng)有序的* 數(shù)組中,具體方式是將當(dāng)前元素與已排序的元素從大大小依次比較,如果當(dāng)前元素比已排序的元素小時(shí),將原來(lái)已經(jīng)* 有序的元素往后移一位,給新元素挪一個(gè)“坑”,然后繼續(xù)往前比較,一路將“坑”前移,直到找到當(dāng)前元素比已排序數(shù)* 組大的元素為止,最后將當(dāng)前元素填到上面留出來(lái)的那個(gè)坑中即可。* @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 希爾排序 將數(shù)組按照步長(zhǎng)分組,對(duì)每組分別排序,然后減小步長(zhǎng),重新分組,對(duì)每個(gè)分組進(jìn)行插入排序,直到步長(zhǎng)* 為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));}}?
轉(zhuǎn)載于:https://www.cnblogs.com/quxiaozha/p/sort.html
總結(jié)
以上是生活随笔為你收集整理的java冒泡排序,选择排序,插入排序,希尔排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: #41 最短路(分治+线性基)
- 下一篇: 无限分类设计