本题要求使用冒泡法排序,将给定的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
上一篇
下一篇