c++数组排序的5种方法实例代码

 更新时间:2023年01月11日 14:13:42   作者:布鲁撸代码  
大家还在为大小排序而烦恼吗?今天让我我大家解决这个问题吧,下面这篇文章主要给大家介绍了关于c++数组排序的5种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

方法一:冒泡排序

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

总结

到此这篇关于c++数组排序的5种方法的文章就介绍到这了,更多相关c++数组排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++顺序表实现图书管理系统

    C++顺序表实现图书管理系统

    这篇文章主要为大家详细介绍了C++顺序表实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言八道笔试题精讲带你掌握指针

    C语言八道笔试题精讲带你掌握指针

    C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍
    2022-07-07
  • C语言函数栈帧的创建与销毁详解

    C语言函数栈帧的创建与销毁详解

    函数栈帧(stack frame)就是函数调用过程中在程序的调用栈(call stack)所开辟的空间,下面这篇文章主要给大家介绍了关于C语言函数栈帧的创建与销毁的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • C语言变量类型的深入分析

    C语言变量类型的深入分析

    这篇文章主要介绍了C语言变量类型的深入分析的相关资料,需要的朋友可以参考下
    2017-07-07
  • C++初阶教程之类和对象

    C++初阶教程之类和对象

    C++是面向对象编程的,这也是C++与C语言的最大区别,而类和对象就是C++面向对象的基础,下面这篇文章主要给大家介绍了关于C++初阶教程之类和对象的相关资料,需要的朋友可以参考下
    2022-02-02
  • C++ 先对数组排序,在进行折半查找

    C++ 先对数组排序,在进行折半查找

    以下小编就为大家介绍两种实现方法。第一种方法是,选择排序法+循环折半查找法。第二种方法是,冒泡排序法+递归折半查找法。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • C语言动态规划之背包问题详解

    C语言动态规划之背包问题详解

    这篇文章主要介绍了C语言动态规划之背包问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言实现文件读写

    C语言实现文件读写

    这篇文章主要为大家详细介绍了C语言实现文件读写,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言顺序查找算法介绍及示例

    C语言顺序查找算法介绍及示例

    顺序查找又称线性查找,主要用于在线性表中进行查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找,下面我们来一探究竟
    2022-08-08
  • C++实现LeetCode(115.不同的子序列)

    C++实现LeetCode(115.不同的子序列)

    这篇文章主要介绍了C++实现LeetCode(115.不同的子序列),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论