八大排序算法JAVA實現(時間複雜度O(n*n)篇)

本文主要描述3個時間複雜度爲n2的排序算法:冒泡排序、選擇排序、插入排序。算法


 

1.冒泡排序:由數組頭部開始,一次比較兩個元素,若是他們的順序錯誤就把他們交換過來。每次交換完成後,當前數組最大值就會被放在最後。數組

 1     public int[] bubbleSort(int[] a, int n)
 2     {
 3         for (int j = 0; j < n - 2; j++)
 4         {
 5             for (int i = 0; i < n - j - 1; i++)
 6             {// 若是當前數比下一個大,交換,不然繼續看下一個數
 7                 if (a[i] > a[i + 1])
 8                 {
 9                     int temp = a[i + 1];
10                     a[i + 1] = a[i];
11                     a[i] = temp;
12                 }
13             }
14         }
15         return a;
16     }
17     

傳入參數:a爲待排序數組,n爲數組長度。優化

第一個for循環,用j的值控制第二個循環,即比對數組的長度。由冒泡排序的定義可知,每一次都會將最大值放在最後,因此下一次排的時候就能夠少管一個數;spa

第二個for循環,將兩個數比對,大的放在後面。code

本題第一個for循環是一種小小的優化,能夠不使用,直接對整個數組進行交換也是沒有問題的。blog


 

2.選擇排序:每次在數組中選擇最小的一個數,將其依次放在數組頭對應位置。排序

 1     public int[] selectionSort(int[] a, int n)
 2     {
 3         for (int j = 0; j < n - 1; j++)
 4         {//j表示須要在以j開始的數組裏面尋找一個最大值填充j位
 5             int maxi = 0;
 6             for (int i = 0; i < n - j; i++)
 7             {// maxi表示當前序列最大值的下標
 8                 if (a[maxi] < a[i])
 9                 {
10                     maxi = i;
11                 }
12             }
13             if (maxi != n - j - 1)
14             {
15                 int temp = a[n - j - 1];
16                 a[n - j - 1] = a[maxi];
17                 a[maxi] = temp;
18             }
19         }
20         return a;
21     }

3.插入排序:將其模擬爲往一個有序數組中插入一個值。關鍵在於須要把有序數組比當前數大的數字一個個日後移動。io

 1     public int[] insertionSort(int[] a, int n)
 2     {
 3         for (int i = 1; i < n; i++)
 4         {//認爲a[0]只有一個數,是有序的。因此從第二個數開始插入
 5             int nowNum = a[i];
 6             int j = i - 1;
 7             for (; j >= 0; j--)
 8             {//把全部比插入數大的數字日後挪,循環結束後就會留出一個空位
 9                 if (nowNum < a[j])
10                 {
11                     a[j + 1] = a[j];
12                 }
13                 else
14                 {
15                     break;
16                 }
17             }
18             a[++j] = nowNum;
19         }
20         return a;
21     }
相關文章
相關標籤/搜索