C++程序:按升序排列数组元素
为了有效解决一些问题,对数据项进行正确的排序非常重要。最常见的排序问题之一就是元素排序问题。本文将演示如何在C++中按升序(根据数值递增)排列数组成员。
为了按特定顺序排列数字或非数字元素,此领域提供了各种各样的排序算法。本文只介绍两种简单的排序方法:选择排序和冒泡排序。让我们分别使用适当的技术和C++实现代码来研究每一种方法。
使用冒泡排序法按升序排序数组
冒泡排序法是排序数组元素最流行且最直接的方法之一。此方法依次检查两个元素是否按正确顺序排列。如果不是,则该方法交换元素,直到它们按正确顺序排列。然后,向右移动并对另一组值重复此过程。在冒泡排序方法的几个阶段结束时,单个元素将被放置在正确的预期位置。让我们看一下冒泡排序算法。
算法
- 读取数组A及其大小n作为输入
- 对于i从0到n-1,执行
- 对于j从0到n-2,执行
- 如果A[j] > A[j + 1],则
- 交换A[j]和A[j + 1]
- 结束if
- 如果A[j] > A[j + 1],则
- 结束for
- 对于j从0到n-2,执行
- 结束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是输入的大小。如果任何阶段没有交换,则只需通过确定下一阶段是否不会发生变化,就可以加快冒泡排序的速度。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP