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+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告