c++数组排序的五种方法

本文介绍了四种常见的排序算法:冒泡排序、使用sort函数的快速排序、交换函数swap的排序以及归并排序。详细阐述了每种算法的原理、步骤,并提供了C++实现示例。对于sort函数,还提到了如何进行降序排序的两种方法。这些排序算法在计算机科学中具有重要地位,理解并掌握它们对于提升编程能力非常有益。
摘要由CSDN通过智能技术生成

方法一:冒泡排序

  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);

… …

方法四:快速排序

  1. 找到分界点x,q[L],q[(L+R)/2],q[R]
  2. 左边所有数Left<=x,右边所有数Right>=x
  3. 递归排序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);
}

方法五:归并排序

  1. 确定分界点:mid=(l+r)/2
  2. 递归排序Left,递归排序Right
  3. 归并 —— 合二为一  

归并排序算法模板
 

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];
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值