c++數(shù)組排序的5種方法實(shí)例代碼
方法一:冒泡排序
- 比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
- 對(duì)每一對(duì)相鄰元素做同樣的工作,執(zhí)行完畢后,找到第一個(gè)最大值。
- 重復(fù)以上的步驟,每次比較次數(shù)-1,直到不需要比較
示例:對(duì)數(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ù)排序
示例:對(duì)數(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. 自定義一個(gè)比較大小的函數(shù),將大的排在前面

方法三:用交換函數(shù)swap排序
… …
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
… …
方法四:快速排序
- 找到分界點(diǎn)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);
}方法五:歸并排序
- 確定分界點(diǎn):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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組翻轉(zhuǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組翻轉(zhuǎn)的實(shí)現(xiàn)方法的相關(guān)資料,這里用幾種實(shí)現(xiàn)方法來實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
使用c++實(shí)現(xiàn)OpenCV繪制圓端矩形
這篇文章主要介紹了使用c++實(shí)現(xiàn)OpenCV繪制圓端矩形,其中著重的講解了OpenCV使用過程中需要注意的一些小細(xì)節(jié),避免浪費(fèi)大家在開發(fā)過程中浪費(fèi)多余的時(shí)間2021-08-08
C語言實(shí)現(xiàn)整數(shù)逆序的情況解析
今天通過本文給大家介紹C語言實(shí)現(xiàn)整數(shù)逆序的情況,本文通過實(shí)例代碼多種舉例給大家介紹的非常詳細(xì),對(duì)C語言整數(shù)逆序相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2021-11-11
c++類的隱式轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換重載詳解
轉(zhuǎn)換函數(shù)的名稱是類型轉(zhuǎn)換的目標(biāo)類型,因此,不必再為它指定返回值類型;轉(zhuǎn)換函數(shù)是被用于本類型的數(shù)值或變量轉(zhuǎn)換為其他的類型,也不必帶參數(shù)2013-09-09
C++11?關(guān)鍵字?const?使用小結(jié)
const大致意思是“我承諾不改變這個(gè)值”。主要用于說明接口,這樣在把變量傳入函數(shù)時(shí)就不必?fù)?dān)心變量會(huì)在函數(shù)內(nèi)被改變,本文給大家介紹C++11?關(guān)鍵字?const?使用小結(jié),感興趣的朋友一起看看吧2021-12-12

