一日一プロ

ソートの安定性

バブルソートと選択ソート

using System;
using System.Collections.Generic;

namespace StalbeSort
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			int N;
			List<int> data = new List<int>();

			N = int.Parse(Console.ReadLine ());
			for (int i = 0; i < N; i++) {
				data.Add (int.Parse (Console.ReadLine ()));
			}

			Console.WriteLine ("Bubble");
			List<int> bubble = new List<int>(data);
			BubbleSort (bubble);

			Console.WriteLine ("Selection");
			List<int> selection = new List<int> (data);
			SelectionSort (selection);

			bool flg = true;
			for (int i = 0; i < data.Count; i++) {
				if (bubble [i] != selection [i]) {
					flg = false;
				}
			}

			if(flg == true){
				Console.WriteLine ("Stable");
			}else{
				Console.WriteLine("NotStable");
			}
		}

		public static void BubbleSort(List<int> data)
		{
			for (int i = 0; i < data.Count; i++) {
				int j = ( data.Count-1);
				while ((j-1) >= i){
					if( data [j-1] > data [j]) {
						int tmp = data [j-1];
						data [j-1] = data [j];
						data [j] = tmp;
					}
					j--;
				}
				DataPrint (data);
			}
		}

		public static void SelectionSort(List<int> data)
		{

			for (int i = 0; i < data.Count; i++) {
				int min = 999999;
				int tmp_idx = i;

				for (int j = i; j < data.Count; j++) {
					if (min > data [j]) {
						min = data [j];
						tmp_idx = j;
					}
				}
				if (i != tmp_idx) {
					int tmp = data [i];
					data [i] = data [tmp_idx];
					data [tmp_idx] = tmp;
				}
				DataPrint (data);
			}
		}

		public static void DataPrint(List<int> data)
		{
			for (int i = 0; i < data.Count; i++) {
				Console.Write ("{0},", data [i]);
			}
			Console.WriteLine ();
		}
	}
}