PTA-冒泡排序法(C++)

技术博客 (45) 2023-12-19 09:01:01

本题要求使用冒泡法排序,将给定的n个整数从小到大排序后输出,并输出排序过程中每一步的中间结果。

冒泡排序的算法步骤描述如下:

第1步:在未排序的n个数(a[0]〜 a[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];

第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];

……

第i步:在剩下未排序的n−k个数()中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];

……

第n−1步:在剩下未排序的2个数(a[0] 〜a[1])中,比较这两个数,若不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[1]中的最大元素“冒泡”到a[1]。

输入格式
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。

输出格式
在每一行中输出排序过程中对应步骤的中间结果,即每一步后a[0]〜 a[n−1]的值,相邻数字间有一个空格,行末不得有多余空格。

输入样例
5
8 7 6 0 1

输出样例
7 6 0 1 8
6 0 1 7 8
0 1 6 7 8
0 1 6 7 8

#include<iostream>

using namespace std;

void bubbleSort(int *arr,int len) 
{ 
   
	for (int i = 0; i < len - 1; i++) 
	{ 
   
		for (int j = 0; j < len - i - 1; j++) 
		{ 
   
			if (arr[j] > arr[j + 1]) 
			{ 
   
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
		for (int k = 0; k < len; k++) 
		{ 
   
			if (k == 0) 
			{ 
   
				cout << arr[k] ;
			}
			else 
			{ 
   
				cout <<" "<< arr[k];
			}
		}
		cout << endl;
	}
}

int main() 
{ 
   
	int len = 0;
	cin >> len;
	int *arr = new int[len];
	if (len == 1) 
	{ 
   
		cin >> arr[0];
		cout << arr[0];
	}
	else 
	{ 
   
		for (int i = 0; i < len; i++)
		{ 
   
			cin >> arr[i];
		}
		bubbleSort(arr, len);
	}
}

数组的长度在编译器要求定下来。而变量内的值直到运行时在知道。

可使用动态分配数容组:

int len = 0;
cin >> len;
int *arr = new int[len];
 
delete[] arr;//用完后别忘了delete
THE END

发表回复