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: 2, 5, 8, 10, 12, 12, 25, 36, 44, 45, 58, 63, 74, 78, 84, 89, 95, 96, 

使用选择排序法按升序排序数组

使用选择排序策略时,我们从索引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 min_index( int arr[], int n, int s, int e ){
   int min = 99999, min_ind = -1;
   for ( int i = s; i < e; i++ ) {
      if ( arr[i] < min ) {
         min = arr[i];
         min_ind = i;
      }
   }
   return min_ind;
}
void solve( int arr[], int n ){
   int i, j, ind;
   for ( i = 0; i < n; i++ ) {
      ind = min_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: 2, 5, 8, 10, 12, 12, 25, 36, 44, 45, 58, 63, 74, 78, 84, 89, 95, 96, 

结论

排序是一个基本问题,它涉及根据预定的布局逻辑排列数字或其他项目。此领域还有许多其他排序方法,但在这篇文章中,我们将重点介绍两种易于使用和理解的方法。这两种方法是选择排序法和冒泡排序法。我们已经使用这两种方法将数据集按升序(非递减)排列。虽然效率不高,但这两种排序方法都很简单。这两种方法都需要O(n2)的时间复杂度,其中n是输入的大小。如果任何阶段没有交换,则只需通过确定下一阶段是否不会发生变化,就可以加快冒泡排序的速度。

更新于:2022年12月14日

11K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.