日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

c++數組排序的5種方法實例代碼_C 語言

作者:布魯擼代碼 ? 更新時間: 2023-02-27 編程語言

方法一:冒泡排序

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做同樣的工作,執行完畢后,找到第一個最大值。
  3. 重復以上的步驟,每次比較次數-1,直到不需要比較

示例:對數組4,2,8,0,5,7,1,3,9 進行排序

#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函數排序

示例:對數組2,4,5,3,1進行排序

sort函數的算法效率相當于快排。

sort 函數默認的是進行升序排序

有兩種方法可以進行降序,可自由選擇?

1. 使用greater<int>()

如果排序其他類型可更改參數

2. 自定義一個比較大小的函數,將大的排在前面

方法三:用交換函數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]
  • 左邊所有數Left<=x,右邊所有數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];
}

總結

原文鏈接:https://blog.csdn.net/weixin_64565233/article/details/126652834

欄目分類
最近更新