常見的排序演算法 :氣泡排序 、選擇排序、插入排序、歸併排序、快速排序、堆排序
#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...