快速排序:
取某個數作為中間數來進行比較,不斷的交換陣列中的兩個數,分成小於中間數和大於中間數的兩個分組,再對分組做快速排序(也就是用遞迴的思想)
歸併排序:
從中間把陣列分成兩部分,每部分都進行一次歸併排序(遞迴),然後再使用merge把這兩部分已排完序的陣列合併成順序陣列。
堆排序:
1、保持堆特性:左右兩子樹都為最大堆,只有父節點可能不滿足,於是遞迴的進行保持最大堆特性的運算(也就是不滿足就和子樹換,換完繼續對子樹進行保持對特性)
2、建堆:利用1中的函式,從葉子的父節點開始到根節點進行保持對特性的運算,從而達到建堆。
3、排序:由於建堆完成之後,根節點一定是最大值,因此不斷的把根節點和葉子交換,並且減少陣列大小。
**附上:
void swap(int *vec, int i, int j)
void quicksort(int *vec, int beg, int end)
} swap(vec, mid, end);
quicksort(vec, beg, mid - 1);
quicksort(vec, mid+1, end); }}
void merge(int *vec, int p, int q, int end)
for(int i = 0; i < n2; ++i)
int l_beg = 0;
int r_beg = 0;
for(int i = p; i <= end; ++i)
else if(r_beg == n2)
if(l[l_beg] < r[r_beg])
vec[i] = l[l_beg++];
else
vec[i] = r[r_beg++]; }}
void mergesort(int *vec,int beg, int end)
}//root = 0;
//parent(i) = (i+1)/2-1;
//left(i) = 2*i+1;
//right(i) = 2*(i+1);
void maxheap(int vec,int n, int index)
} else if(index * 2 + 1 == n)
} }void buildheap(int vec, int n)
}void heapsort(int vec, int n)
}
三種排序演算法 歸併排序 快速排序,堆排序
歸併排序 建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併排序演算法穩定,陣列需要o n 的...
三種快速排序
3種快排的實現方式,1是不適合重複元素多,2可以適應重複元素多,3可以優化重複元素多的時間 author hxj 2020年7月27日 public class main int l 0,r arr.length 1 quicksort arr,l,r private static void qui...
三種快速排序以及快速排序的優化
1 快速排序的基本思想 快速排序使用分治的思想,通過一趟排序將待排序列分割成兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小。之後分別對這兩部分記錄繼續進行排序,以達到整個序列有序的目的。2 快速排序的三個步驟 1 選擇基準 在待排序列中,按照某種方式挑出乙個元素,作為 基準 pivot 2...