1.氣泡排序(bubblesort):
氣泡排序演算法的流程如下:
(1)比較相鄰的元素。
(2)對每一對相鄰元素作同樣的行為,從開始第一對到結尾的最後一對。
(3)針對所有的元素重複以上的步驟,每一趟排好乙個數。
複雜度:o(n^2)
**實現:
public class code_00_bubblesort
for(int e = arr.length-1;e>0;e--) }}
public static void swap(int arr, int i, int j)
2.選擇排序(selectionsort):
(1)演算法思想: 每次取乙個最小值。
(2)複雜度:o(n^2)。
**實現:
public class code_02_selectionsort
for(int i = 0;i
int midindex = i;
for(int j =i+1;j
midindex = arr[j] < arr[midindex] ? j : midindex;
}swap(arr,i,midindex);}}
public static void swap(int arr, int i, int j)
3.插入排序(insertionsort):
**實現:
code_01_insertionsort
for(int i = 1;i
for(int j = i-1;j>=0 && arr[j]>arr[j+1];j--) }}
public static void swap(int arr,int i,int j)
複雜度:
1.最佳情況:t(n) = o(n) ;
2.最壞情況:t(n) = o(n^2);
3.平均情況:t(n) = o(n^2);
4.歸併排序(mergesort):
歸併排序:
思想:運用分治法思想解決排序問題。
(1)設定兩個指標,分別指向待排序列的最初位置和末尾位置。
(2)比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下乙個位置。
(3)重複步驟(3)直到某一指標達到尾部。
(4)將另一串行剩下的所有元素直接複製到尾部。
**如下:
public class code_03_mergesort
mergesort(arr,0,arr.length-1);
}public static void mergesort(int arr, int l, int r)
int mid = l + ((r - l) >> 1);
mergesort(arr,l,mid);
mergesort(arr,mid+1,r);
merge(arr,l,mid,r);
//t(n) =2(n/2)+o(n)
}public static void merge(int arr, int l, int m, int r)
while (p1 <= m)
while (p2 <= r)
for (i = 0; i < help.length; i++)
}複雜度: o(nlgn)
6 快速排序(quicksort):
快速排序:
演算法思想:分治法+遞迴
演算法步驟描述:
(1)從數列中挑出乙個元素,稱為 「基準」
(2)重新排序數列,所有元素比基準值小的擺放在基準左邊,所有元素比基準值大的擺在基準的右邊(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。
(3)遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
**實現:
public class code_05_quicksort
quicksort(arr,0,arr.length-1);
}public static void quicksort(int arr,int l,int r)
}private static int partition(int arr, int l, int r) else if(arr[l]>arr[r]) else
}swap(arr,more,r);
return new int ;
}private static void swap(int arr, int i, int j)
複雜度:
堆排:堆排序:
步驟:
堆排序利用了大根堆,堆頂記錄的關鍵字最大這一特徵,使得在當前無序區中選取最大關鍵字的記錄變得簡單。
**實現:
public class code_07_heapsort
for (int i = 0; i < arr.length; i++)
int size = arr.length;
swap(arr, 0, --size);
while (size > 0)
}public static void heapinsert(int arr, int index)
}public static void heapify(int arr, int index, int size)
swap(arr, largest, index);
index = largest;
left = index * 2 + 1;}}
public static void swap(int arr, int i, int j)
複雜度:
o(nlgn)
說明:用小根堆排序與利用大根堆類似,只不過其排序結果是遞減有序的。
複雜度估算公式(master):
t(n) = at(n/b)+o(n^d)
①當dlogb a時,時間複雜度為o(n^d)
java常見排序演算法
package algorithms public class arraydemo int max getmax arr arr sort2 arr int start 0 int end arr.length 1 sort3 arr,start,end print arr public stati...
Java常見排序演算法
氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。public static vo...
java常見排序演算法
1.直接插入排序 public static void insertsort int array array j 1 temp system.out.println arrays.tostring array insertsort 2.希爾排序 希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高...