C++程序:按降序排列数组元素


以有效的方式解决某些问题时,对数据项进行适当的排列是一项基本任务。元素排序问题是最常讨论的排列问题之一。在本文中,我们将了解如何在C++中按降序(值递减顺序)排列数组元素。

此领域存在许多不同的排序算法,用于按给定顺序对数字或非数字元素进行排序。在本文中,我们将仅介绍两种简单的排序方法。冒泡排序和选择排序。让我们逐一了解它们,并附带相应的算法和C++实现代码。

使用冒泡排序技术按降序排序数组

冒泡排序技术是用于对数组中的元素进行排序的最常见和最简单的方法之一。此方法检查两个连续的元素,如果它们按正确的顺序排列,则跳到下一个元素,否则交换它们以将其放置在正确的顺序。然后向右移动并对另一对值执行相同的操作。冒泡排序技术有几个阶段,在每个阶段结束时,一个元素被放置在正确的预期位置。让我们看看冒泡排序技术的算法。

算法

  • 读取数组A及其大小n作为输入
  • 对于i从0到n-1,执行
    • 对于j从0到n - 2,执行
      • 如果A[j] < A[j + 1],则
        • 交换A[j]和A[j + 1]
      • 结束if
    • 结束for
  • 结束for

示例

#include <iostream>
using namespace std;
void display( int arr[], int n ){
   for ( int i = 0; i < n; i++ ) {
      cout << arr[i] << ", ";
   }
}
void swap ( int &a, int &b ){
   int temp = a;
   a = b;
   b = temp;
}
void solve( int arr[], int n ){
   int i, j;
   for ( i = 0; i < n; i++ ) {
      for ( j = 0; j < n-1; j++ ) {
         if ( arr[j] < arr[ j+1 ] ) {
            swap( arr[j], arr[ j + 1 ] );
         }
      }
   }
}
int main(){
   int arr[] = {8, 45, 74, 12, 10, 36, 58, 96, 5, 2, 78, 44, 25, 12, 89, 95, 63, 84};
   int n = sizeof( arr ) / sizeof( arr[0] );
   cout << "Array before sorting: ";
   display(arr, n);
   solve( arr, n );
   cout << "\nArray After sorting: ";
   display(arr, n);
}

输出

Array before sorting: 8, 45, 74, 12, 10, 36, 58, 96, 5, 2, 78, 44, 25, 12, 89, 95, 63, 84, 
Array After sorting: 96, 95, 89, 84, 78, 74, 63, 58, 45, 44, 36, 25, 12, 12, 10, 8, 5, 2, 

使用选择排序技术按降序排序数组

在选择排序技术中,我们从索引i开始到数组的末尾,找到给定数组中的最小元素或最大元素。假设我们正在查找最大元素。在每个阶段,它从索引i到末尾查找最小值,然后将元素放置在其期望的位置,然后从索引i + 1开始再次搜索下一个最大元素,依此类推。完成这些阶段后,整个数组将相应地排序。

算法

  • 读取数组A及其大小n作为输入
  • 对于i从0到n-1,执行
    • ind := 从i到n开始的A的最大元素的索引
    • 如果A[ i ] < A[ ind ],则
      • 交换A[ i ]和A[ ind ]
    • 结束if
  • 结束for

示例

#include <iostream>
using namespace std;
void display( int arr[], int n ){
   for ( int i = 0; i < n; i++ ) {
      cout << arr[i] << ", ";
   }
}
void swap ( int &a, int &b ){
   int temp = a;
   a = b;
   b = temp;
}
int max_index( int arr[], int n, int s, int e ){
   int max = 0, max_ind = 0;
   for ( int i = s; i < e; i++ ) {
      if ( arr[i] > max ) {
         max = arr[i];
         max_ind = i;
      }
   }
   return max_ind;
}
void solve( int arr[], int n ){
   int i, j, ind;
   for ( i = 0; i < n; i++ ) {
      ind = max_index( arr, n, i, n );
      if ( arr[i] < arr[ ind ] ) {
         swap( arr[i], arr[ ind ] );
      }
   }
}
int main(){
   int arr[] = {8, 45, 74, 12, 10, 36, 58, 96, 5, 2, 78, 44, 25, 12,89, 95, 63, 84};
   int n = sizeof( arr ) / sizeof( arr[0] );
   cout << "Array before sorting: ";
   display(arr, n);
   solve( arr, n );
   cout << "\nArray After sorting: ";
   display(arr, n);
}

输出

Array before sorting: 8, 45, 74, 12, 10, 36, 58, 96, 5, 2, 78, 44, 25, 12, 89, 95, 63, 84, 
Array After sorting: 96, 95, 89, 84, 78, 74, 63, 58, 45, 44, 36, 25, 12, 12, 10, 8, 5, 2,

结论

排序问题是一个基本问题,我们根据给定的排列逻辑对数字或其他值进行排列。此领域存在许多不同的排序技术,但是,在本文中,我们看到了两种易于实现且易于理解的排序技术。这两种方法是冒泡排序技术和选择排序技术。使用这两种方法,我们已将数据集按降序(非递增)排序。这两种排序方法在时间方面效率不高,但易于理解。这两种方法都花费O(n2)的时间,其中n是输入的大小。通过简单地检查任何阶段中是否没有交换,可以使冒泡排序速度更快,因为下一个连续阶段不会改变任何内容。

更新于: 2022年12月14日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告