c++數(shù)組排序的5種方法實例代碼
方法一:冒泡排序
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素做同樣的工作,執(zhí)行完畢后,找到第一個最大值。
- 重復(fù)以上的步驟,每次比較次數(shù)-1,直到不需要比較
示例:對數(shù)組4,2,8,0,5,7,1,3,9 進(jìn)行排序
#include<iostream> using namespace std; int main() { int arr[9] = { 4,2,8,0,5,7,1,3,9 }; for (int i = 0; i < 9 - 1; i++) { for (int j = 0; j < 9 - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } for (int i = 0; i < 9; i++) { cout << arr[i] << endl; } system("pause"); return 0; }
方法二:sort函數(shù)排序
示例:對數(shù)組2,4,5,3,1進(jìn)行排序
sort函數(shù)的算法效率相當(dāng)于快排。
sort 函數(shù)默認(rèn)的是進(jìn)行升序排序
有兩種方法可以進(jìn)行降序,可自由選擇
1. 使用greater<int>()
如果排序其他類型可更改參數(shù)
2. 自定義一個比較大小的函數(shù),將大的排在前面
方法三:用交換函數(shù)swap排序
… …
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
… …
方法四:快速排序
- 找到分界點x,q[L],q[(L+R)/2],q[R]
- 左邊所有數(shù)Left<=x,右邊所有數(shù)Right>=x
- 遞歸排序Left,遞歸排序Right
快速排序算法模板:
void quick_sort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j = r + 1, x = q[l+r>>1]; //l+r>>1的意思是l+r的值除以2取整 while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j) swap(q[i], q[j]); else break; } quick_sort(q, l, j), quick_sort(q, j + 1, r); }
方法五:歸并排序
- 確定分界點:mid=(l+r)/2
- 遞歸排序Left,遞歸排序Right
- 歸并 —— 合二為一
歸并排序算法模板
void merge_sort(int q[], int l, int r) { if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) if (q[i] < q[j]) tmp[k ++ ] = q[i ++ ]; else tmp[k ++ ] = q[j ++ ]; while (i <= mid) tmp[k ++ ] = q[i ++ ]; while (j <= r) tmp[k ++ ] = q[j ++ ]; for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j]; }
總結(jié)
到此這篇關(guān)于c++數(shù)組排序的5種方法的文章就介紹到這了,更多相關(guān)c++數(shù)組排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MFC創(chuàng)建模態(tài)對話框和非模態(tài)對話框的方法
這篇文章主要介紹了MFC創(chuàng)建模態(tài)對話框和非模態(tài)對話框的方法,需要的朋友可以參考下2014-07-07C++編寫DLL動態(tài)鏈接庫的步驟與實現(xiàn)方法
這篇文章主要介紹了C++編寫DLL動態(tài)鏈接庫的步驟與實現(xiàn)方法,結(jié)合實例形式分析了C++導(dǎo)出類文件及生成與調(diào)用DLL動態(tài)連接庫的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08VSCode配置C/C++并添加非工作區(qū)頭文件的方法
這篇文章主要介紹了VSCode配置C/C++并添加非工作區(qū)頭文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03基于C++詳解數(shù)據(jù)結(jié)構(gòu)(附帶例題)
數(shù)據(jù)結(jié)構(gòu)作為每一個IT人不可回避的問題,本文基于C++編寫,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)結(jié)構(gòu)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06