還是把基礎資料結構複習一下吧,演算法雖然簡單,但是想把後面的思想完全領悟還是比較困難的。
這個是排序的三件套,快速排序,堆排序,歸併排序。
快速排序:以第乙個數為支點,把比他小的放前面,比他大的放後面。
完成這一步需要在乙個大迴圈裡巢狀兩個並列的小迴圈。
大迴圈控制是否結束,第乙個小迴圈控制把小數往前移,第二個控制把大數往前移。
然後以支點的位置分別左右遞迴。
#include#include#include#includeusing namespace std;
void quicksort(vector&arr,int x,int y)
else
}while(true)
else
}
}quicksort(arr,l,x-1);
quicksort(arr,x+1,r);
} int main()
else}}
void makeheap(vector&tem,vector&arr)
}int main()
for(int i=x1,c=0;i<=y2;)
arr[i++]=tem[c++];
}
void mergersort_loop(vector&arr)
{int m=2;//合併的總長度,即每個區間為長度為 m/2
int len=arr.size();//把無符號的數轉化為int
while(len>m/2)//能否進行一次合併
{for(int i=0;len-i>m/2;i+=m)//能合併多少次
{if(i+m-1>n;
vectorarr(n);
for(int i=0;i
資料結構 堆排序(演算法)
基本介紹 基本思想 舉例 示例 public class heapsortdemo 1 將無序陣列構建成乙個堆,根據公升序降序需求選擇大頂堆或小頂堆 int k 1 for int i arr.length 2 1 i 0 i 2 將堆頂元素與末尾元素交換,將最大的元素 沉 到陣列末端 3 重新調整...
資料結構排序演算法之堆排序
關於堆排序的相關知識非常複雜,不懂得可以參考任意一本資料結構教程,本部落格只對堆排序框架及 進行講解。堆排序分三個大的步驟 建初堆,堆調整,堆排序 其中最核心的是堆調整 1建初堆 從陣列中的最後乙個非葉子節點開始,從下而上倒推 重複呼叫堆調整函式 2堆調整 堆調整的前提是已建好了乙個堆,但是因為輸出...
資料結構之堆排序與快速排序
堆排序 特性 堆排序,效率高。時間複雜度 o n logn 空間複雜度 o 1 穩定性 不穩定 public static void adjust int array,int start,int end else if array i 0 i for int j 0 j array.length 1...