7大比較類排序演算法的C 實現(詳細注釋)

2021-10-23 02:30:49 字數 1840 閱讀 4201

1、比較類排序演算法和非比較類排序演算法的分類以及它們的時間複雜度:

} //基準數歸位

arr[left] = arr[i];

arr[i] = base;

quicksort(left, i - 1, arr);//遞迴左邊

quicksort(i + 1, right, arr);//遞迴右邊

}// 2、插入排序

//有一種從後往前的感覺

void insertsort(vector&input)}}

}//5、希爾排序

// 根絕gap對陣列進行分組,然後在組內進行插入排序,然後縮小gap進行迭代,直至gap為1

void shell_sort(vector&input)

input[j] = insert;

}gap = gap/2;

}}// 6、堆排序

//解法一:建立最大堆結構

//注意:是把乙個陣列想象成了最大堆!!!!!!

//利用最大堆這種資料結構進行排序:先構建個最大堆,

//然後將根節點(此時根節點的值即為最大值)與陣列最後乙個元素交換,然後對剩下的n-1個元素進行迭代(建堆、交換)

void heap_sort1(vector&input)

///2、把最大元素移除 接著進行見堆!!!!

for(int j=input.size()-1;j>0;j--) //這裡的j是大於0 沒有等於

}// void build_heap(vector&input) //構建最大堆

// // }

void heap_max(vector&input, int i,int n)//將i節點為根的堆中大的數依次上移,n表示堆中的資料個數

if(rightinput[largest])

if(largest!=i) //最大值不是父節點,則進行交換

}//堆排序解法二:利用stl的優先順序佇列

void heap_sort2(vector&input)

}//7、歸併排序

void merge_sort(vector&input,int low,int high)

int mid = low+(high-low)/2;

merge_sort(input,low,mid);

merge_sort(input,mid+1,high);

merge(input,low,mid,high);//一開始merge時候 每個序列只有乙個元素,所以都是有序的

}void merge(vector&input,int low,int mid,int high) //這種合併兩個子串行的方法有效的前提是:兩個子串行是有序的

else

}while(i<=mid)

while(j<=high)

for(int k=low,q=0;k<=high;k++,q++)

}};int main();

//int k = 4;

//vectorresult;

s.merge_sort(input,0,7);

for(int i=0;i

1、十大經典排序演算法(**演示)

2、經典排序演算法

7種排序演算法的C 實現以及比較

c 自帶排序 include int list 1001 sort list,list 1001 預設從小到大排序,通過在第三個元素加上cmp,就可以從小到大排序。排序可以分為內部排序和外部排序兩種。內部排序 待排序記錄存放在計算機隨機儲存器中 說簡單點,就是記憶體 進行的排序過程。外部排序 待排序...

C 排序演算法的比較

首先通過圖表比較不同排序演算法的時間複雜度和穩定性。排序方法 平均時間 最壞情況 最好情況 輔助空間 穩定性 直接插入排序 o n2 o n2 o n o 1 是氣泡排序 o n2 o n2 o n o 1 是簡單選擇排序 o n2 o n2 o n2 o 1 是希爾排序 o nlog2n o n2...

C 排序演算法 基類的實現

論壇中經常有人問選擇法 冒泡法排序演算法用c 怎麼實現,正好我手頭上有這方面的 乾脆拿出來跟大家分享一下。其實 已經寫了很久了,只是平時工作比較忙,沒時間整理。現在失業了,每天呆在家裡實在無聊,就抽空把這部分 整理出來。好了,廢話少說,進入正題吧。排序演算法,首先應該考慮的是通用性,不管是陣列,還是...