Javaでクイックソート書いてみた。

授業でJavaやってる。今日はソートということで授業の課題は選択ソートだったんだけど自分は一歩踏み込んでクイックソートを書いてみた。

[java]
import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;

/*
* 100〜999の3桁のランダムな整数10個をソートする
*/
class QuickSort {
static JButton sortButton = new JButton("クイックソート");
static JLabel resultLabel = new JLabel("");
static int[] data = getRandomList(10);
static int length = data.length;
static JLabel arrayLabel = new JLabel(IntToString(data));

public static void main(String args[]) {

final JFrame frame = new JFrame("クイックソート");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
Container cont = frame.getContentPane();
cont.setLayout(new GridLayout(0,1));

sortButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
qSort(data, 0, length-1);
resultLabel.setText(IntToString(data));
}
});

cont.add(arrayLabel);
cont.add(sortButton);
cont.add(resultLabel);

frame.pack();
frame.setVisible(true);
}

public static void qSort(int[] array, int l, int r) {
if(l < r) {
int m = l;
for (int i = l+1; i <= r; i++) {
if (array[i] < array[l]) {
swap(array, ++m, i);
}
}
swap(array, l, m);
qSort(array, l, m-1);
qSort(array, m+1, r);
}
}

private static void swap(int a[], int n, int m) {
int temp = a[m];
a[m] = a[n];
a[n] = temp;
}

public static int[] getRandomList(int size) {
int[] list = new int[size];
int nMax = 999;
int nMin = 100;
for (int j = 0; j < size; j++) {
list[j] = (int)(Math.floor(Math.random()*(nMax-nMin+1))+nMin);
}

return list;
}

public static String IntToString(int a[]){
String result="";
for(int i=0; i<a.length; i++){
result = result + Integer.toString(a[i]) + " ";
}
return result;
}
}

[/java]

一応うまくいったっぽい。たまにはアルゴリズム勉強しようと思った。。

LINEで送る
Pocket

コメントを残す

*