資料結構 2 排序演算法

2021-08-30 11:36:17 字數 1154 閱讀 5690

常見的排序演算法 :氣泡排序 、選擇排序、插入排序、歸併排序、快速排序、堆排序

#includeusing namespace std;

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

//冒泡法 平均時間複雜度 o(n^2)

void bubblosort(int a,int n)

//void bubblosort(int *a,int n)

//因為不能拷貝陣列,所以我們無法以值傳遞的方式使用陣列引數。

//因為陣列會被轉換成指標,所以當我們為函式傳遞乙個陣列時,

//實際上傳遞的是指向陣列首元素的指標。

for(int i=0;ia[j+1])

swap(a,j,j+1); //陣列a被轉換成int*並指向a[0] }}

//雞尾酒排序 平均時間複雜度 o(n^2)

void cocktailsort(int *a,int n)

right--;

for(int i=right;i>0;i--) //後半輪,排序最小數

left++; }}

//選擇排序 不穩定排序 o(n^2)

void selectionsort(int a,int n)

for(int i=0;i=0&&a[j]>a[j+1];j--)

swap(a,j,j+1); }}

//歸併排序

void mergesort(int *a,int len)

mergesort(a,0,len-1) }

//遞迴過程

void mergesort(int *a,int l,int r)

}//左右兩部分排序

void merge(int *a,int left,int midum,int right)

swap(a,more,r);

return new int ;

}//堆排序

void heapinsert(int *a,int len)

for(int i=0;i0) }

void heapinsert(int *a,int index)

}void heapify(int *a,int index,int heapsize)

}

資料結構8 排序2

快速排序法是目前公認的最佳排序法,他的原理和氣泡排序法一樣都是利用交換的方式,不過它會先在資料中找到乙個值稱為支點,把小於支點的資料放在左邊,而大於支點的資料放在右邊,再以同樣的方式處理左右兩邊資料,直到完成為止。步驟如下 對於鍵值集合k1,k2.kn,快速排序步驟如下 1 取k為第乙個鍵值 支點 ...

資料結構3 排序演算法

氣泡排序 演算法描述 排序問題是基本演算法,主要有冒泡演算法 插入排序以及選擇排序演算法。冒泡演算法是對整個列進行多次遍歷迴圈,直至將所有的數都比較一遍,每次迴圈都能產生乙個最大數放置於後面,這樣需要兩層迴圈 外層控制次數,內層控制單次冒泡,內層針對的是相鄰裡兩個進行比較的迴圈。using syst...

資料結構與演算法(九)排序

演算法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性氣泡排序 o n 2 o n 2 o n o 1 穩定選擇排序 o n 2 o n 2 o n 2 o 1 不穩定插入排序 o n 2 o n 2 o n o 1 穩定希爾排序 o nlogn o n 2 o n o 1...