競プロおぼえがき

おぼえがきのためのブログ

yukicoder | No.490 yukiソート

  • 問題

No.490 yukiソート - yukicoder

  • 概要

以下の手順に沿って与えられた数列をソートする。
1. 各 i (0 < i < 2n - 3)に対してiの小さい順に2.を行う
2. p + q = i(1 \leq p < q \leq n - 1)を満たす整数の組(p, q)に対してa_{p} > a{_q}ならばa_{p}とa{_q}を交換する。

  • 考え方

問題文に書かれている通りに実装するだけ。

import java.util.Scanner;

public class Main {
    static Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
       int n = in.nextInt();
       int[] a = new int[n];
       for(int i = 0; i < n; i++){
           a[i] = in.nextInt();
       }

       for(int i = 0; i < 2 * n - 3; i++){
           for(int j = (i + 1) / 2; j <= i; j++){
               int q = j;
               int p = i - q;
               if(q <= n - 1 && a[p] > a[q]){
                   int t = a[p];
                   a[p] = a[q];
                   a[q] = t;
               }
           }
       }
       for(int i = 0; i < a.length; i++){
           if(i != 0){
               System.out.print(" ");
           }
           System.out.print(a[i]);
       }
       System.out.println();
    }
}