排序 C 實現

2021-10-03 13:44:01 字數 1440 閱讀 1877

快速排序

//兩個哨兵i和j,i從左往右找大於key的值,j從右往左找小於key的值,找到之後交換。迴圈之後還有一次交換

void quicksort(vector& a, int left, int right)

swap(a,j,left);

quicksort(a, left, j - 1);

quicksort(a, j + 1, right);

}void swap(vector&a, int i, int j)

快速排序的隨機寫法,注意將partition與quicksort兩個函式分開

void swap(vector&a, int i, int j)

int randomnum(int left, int right)

int partition(vector& nums, int left, int right)

swap(nums, j, left);

return j;

}void quicksort(vector& nums, int left, int right)

氣泡排序

//核心思想:冒泡的每一輪遍歷都會確定乙個數的最終位置

//可以先確認最後乙個,也可以先確認第乙個,分別寫在下方,注意迴圈條件的區別

//可以設定乙個flag,在每輪遍歷結束後根據flag的值判斷是否需要開啟新一輪遍歷

void bubblesort(vector&a)//先確定最後乙個位置

} if(flag==false)

break;//交換完畢 }}

void bubblesort(vector&a)//先確定第乙個位置

} if(flag==false)

break;//交換完畢 }}

void swap(vector&a, int i, int j)

歸併排序

void mergesort(vector&data,int start,int end)

void mergeone(vector&data,int start,int mid,int end)

while(i<=mid)

tmp[k++]=data[i++];

while(j<=end)

tmp[k++]=data[j++];

for(int i=0;i插入排序

//核心思想:遍歷新元素時,該元素之前的所有元素都是有序的

void insertsort(vector&a)//先確定第乙個位置

}

希爾(shell)排序

//是帶增量的插入排序

void shellsort(vector& a)

}

排序 快速排序,C 實現

本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...

快速排序 c 實現

快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...

拓撲排序 C實現

接著上一次的c 實現,這次用c語言寫一遍。主要是多了棧stack的實現部分。參考了 資料結構 教材。如下 include include include include 圖的鄰接表儲存表示 define max vertex num 20 typedef struct arcnode arcnode...