21xrx.com
2025-03-24 20:31:43 Monday
文章检索 我的文章 写文章
C++基础:从大到小排序
2023-07-10 12:10:44 深夜i     --     --
C++ 基础 排序 从大到小 数组

在编程中,排序是一个基础且非常重要的操作,因为我们往往需要将一组数据按照一定规则排列起来,以便更方便地进行查找、统计等操作。其中,从大到小排序也是一种常见的排序方式。下面我们来介绍一下如何使用C++语言实现从大到小排序。

首先,我们可以选择使用C++ STL标准模板库中的sort()函数来进行排序。该函数的调用方式如下:

sort(first, last, compare);

其中,第一个参数first表示待排序数组的起始位置,第二个参数last表示待排序数组的末尾位置。而第三个参数compare则是一个可选的比较函数,用于指定排序规则,如果不指定,则默认按照升序排列。

以从大到小排序为例,我们需要自定义一个比较函数来实现排序规则。比较函数的定义如下:

bool cmp(int a, int b)
  return a > b;

该函数返回值为bool类型,表示a是否大于b。当返回值为true时,表示a大于b,需要进行交换,从而实现从大到小排序。

接着,我们可以使用以上定义好的比较函数进行排序。示例如下:

int arr[] = 5;
int n = sizeof(arr) / sizeof(int);
sort(arr, arr + n, cmp);
for(int i = 0; i < n; i++){
  cout << arr[i] << " ";
}

以上代码将输出:

10 8 5 4 2

其中,arr数组代表待排序的一组数据,n表示数据的长度。sort()函数的第一个参数为数组的起始位置,第二个参数为末尾位置,第三个参数为比较函数cmp。最后,通过for循环将排好序的数据进行输出。

除此之外,我们还可以选择使用手动排序方法进行从大到小排序。手动排序的思路就是遍历待排序数组,每次找出当前数组中最大的数,将其放在当前数组的最前面,然后将剩下的元素进行递归处理,直到整个数组排好序为止。

示例代码如下:

#include<iostream>
using namespace std;
void sort(int arr[], int begin, int end){
  if(begin >= end) return;
  int max_idx = begin; // 当前数组中最大元素的位置
  for(int i = begin; i < end; i++){
    if(arr[i] > arr[max_idx])
      max_idx = i;
    
  }
  swap(arr[max_idx], arr[begin]); // 将最大元素放在数组开头
  sort(arr, begin+1, end); // 递归处理剩下的元素
}
int main(){
  int arr[] = 10;
  int n = sizeof(arr) / sizeof(int);
  sort(arr, 0, n);
  for(int i = 0; i < n; i++){
    cout << arr[i] << " ";
  }
  return 0;
}

以上代码将输出:

10 8 5 4 2

其中,sort()函数代表手动排序的实现,begin表示当前数组的起始位置,end表示数组的末尾位置。在每一次遍历中,都会找到当前数组中最大的数,并将其放在开头,再对剩下的元素进行递归处理。最后,通过for循环将排好序的数据进行输出。

综上所述,从大到小排序是编程中常见的操作之一,我们可以选择使用C++ STL标准模板库的sort()函数来进行实现,也可以选择手动排序的方式来实现。无论哪种方式,都需要定义一个比较函数,来指定排序规则。希望通过本文的介绍,能够对从大到小排序有更全面的认识。

  
  

评论区