1.入力ファイルパスの入力要求
2.1でのパスのファイルを読み込み配列
に格納
3.並び替え方法の指定
4.指定された方法の分岐
5.配列に格納されている数値を並び替える
6.出力先ファイルパスの入力要求を行う
7.5で並び替えたファイルの結果を6で指定したファイルに書き込む
バブルソートは出来たのですが、クイックソートの部分が上手く行きません。
ファイルを読み込んでint型の配列に移したiarrayがクイックソートの方で上手く
使えず変数 quick_sort に void は無効な型です。と出てしまいます。
また、if文の分岐はこれで合っているのでしょうか?
public class quick {
public static void main(String[] args) throws IOException { String[] strarray = new String[10]; int[] iarray = new int[10]; int a=0; String kekka; try{ System.out.println("ファイルパスを入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String pass = br.readLine(); File file = new File(pass); BufferedReader br2 = new BufferedReader(new FileReader(file)); String str= null; a = 0; while((str = br2.readLine()) != null){ System.out.println(str); strarray[a]=str; a = a +1; } br2.close(); System.out.println("並び替え方法を入力してください。"); String c = br.readLine(); //計測したい処理を記述 long start = System.nanoTime(); iarray = new int[10]; for(int i = 0 ; i < strarray.length ; i++){ iarray[i] = Integer.parseInt(strarray[i]); } if(c.equals("baburu")){ for(int i=0; i < iarray.length-1; i++) { for(int j=0; j < iarray.length-i-1; j++) { if(iarray[j] > iarray[j+1]) { int asc = iarray[j]; iarray[j] = iarray[j+1]; iarray[j+1] = asc; } } } } else if(c.equals("quick")){ // 配列dのleftからrightまでの間のデータ列をクイックソートする static void quick_sort(int[] iarray, int left, int right) { if (left>=right) { return; } int p = iarray[(left+right)/2]; int l = left, r = right, tmp; while(l<=r) { while(iarray[l] < p) { l++; } while(iarray[r] > p) { r--; } if (l<=r) { tmp = iarray[l]; iarray[l] = iarray[r]; iarray[r] = tmp; l++; r--; } } quick_sort(iarray, left, r); // ピボットより左側をクイックソート quick_sort(iarray, l, right); // ピボットより右側をクイックソート } // 配列内のデータ列を表示する static void print_data(int[] iarray) { for(int i = 0; i < iarray.length; i++) System.out.print(iarray[i] + " "); System.out.println(); } } /* public static void main(String[] args) { int[] data = {5, 10, 3, 7, 8, 1, 9, 2}; print_data(data); quick_sort(data, 0, data.length-1); print_data(data); } } /* ソートでかかった時間を計測 */ long end = System.nanoTime(); System.out.println("Time:" + (end - start) / 1000000f + "ms"); System.out.println("出力するファイルを入力してください。"); String tmp1 = br.readLine(); // Fileクラスをインスタンス化 File file1 = new File( tmp1 ); // ファイルが存在するかどうかを判定 if ( !file1.exists() ) { // ファイルが存在しない場合は処理終了 System.out.println( "ファイルが存在しない" ); return; } // 指定されたパスがファイルかどうかを判定 if ( !file1.isFile() ) { // ディレクトリを指定した場合は処理終了 System.out.println( "ファイル以外を指定" ); return; } // ファイルが書き込み可能かどうかを判定 if ( !file1.canWrite() ) { // ファイルが読み込み不可の場合は処理終了 System.out.println("ファイルが読み込み不可"); return; } // FileWriterクラスをインスタンス化 FileWriter filewriter = new FileWriter(file1); for(int i = 0; i < iarray.length; i++) { filewriter.write(iarray[i]+"¥r¥n"); } System.out.println("指定ファイルに書き込まれました。"); // ファイルを閉じる filewriter.close(); }catch(IOException e){ System.out.println(e); } } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/31 01:35
2016/01/31 08:12