1. 程式人生 > >AOJ-ALDS1_2_A Bubble Sort【氣泡排序】

AOJ-ALDS1_2_A Bubble Sort【氣泡排序】

Bubble Sort


Write a program of the Bubble Sort algorithm which sorts a sequenceAin ascending order. The algorithm should be based on the following pseudocode:

BubbleSort(A)
1 for i = 0 to A.length-1
2     for j = A.length-1 downto i+1
3         if A[j] < A[j-1]
4             swap A[j] and A[j-1]

Note that, indices for array elements are based on 0-origin.

Your program should also print the number of swap operations defined in line 4 of the pseudocode.

Input

The first line of the input includes an integerN, the number of elements in the sequence.

In the second line,Nelements of the sequence are given separated by spaces characters.

Output

The output consists of 2 lines.

In the first line, please print the sorted sequence. Two contiguous elements of the sequence should be separated by a space character.

In the second line, please print the number of swap operations.

Constraints

1 ≤N≤ 100

Sample Input 1

5
5 3 2 4 1

Sample Output 1

1 2 3 4 5
8

Sample Input 2

6
5 2 4 6 1 3

Sample Output 2

1 2 3 4 5 6
9

問題簡述:(略)

問題分析

  氣泡排序問題,求使用氣泡排序演算法時資料交換的次數。

  沒有想出來不排序怎麼計算,就直接用排序演算法實現了,中間統計一下交換的次數。

程式說明

  程式是氣泡排序的原始演算法,稍微作了一些改動。

  氣泡排序演算法封裝到函式insertion_sort()中。

  需要注意的是,同時要輸出排序結果。

題記:(略)


參考連結:(略)

AC的C++語言程式如下:

/* AOJ-ALDS1_2_A Bubble Sort */

#include <iostream>

using namespace std;

/* 氣泡排序 */
int bubble_sort(int a[], int n)
{
    int cnt = 0;

    for(int i=0; i<n-1; i++)
        for(int j=n-1; j>=i+1; j--)
            if(a[j] < a[j - 1])
                cnt++, swap(a[j], a[j - 1]);

    return cnt;
}

void output_result(int a[], int n)
{
    for(int i=0; i<n; i++) {
        if(i > 0)
            cout << " ";
        cout << a[i];
    }
    cout << endl;
}

const int N = 100;
int a[N];

int main()
{
    int n;
    cin >> n;
    for(int i=0; i<n; i++)
        cin >> a[i];

    int cnt = bubble_sort(a, n);

    output_result(a, n);
    cout << cnt << endl;

    return 0;
}