一般的な配列並べ替えアルゴリズム


package org.idcn.jse;

public class SortAll {

 /**
  *     ,    ,    ,  (Shell),        Java    
  * 2009.6.4
  * @  . (http://b1135519.xici.net)
  */
 public static void main(String[] args) {
  int[] i = { 1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };
  System.out.println("----       :");
  maoPao(i);
  System.out.println();
  System.out.println("----       :");
  xuanZe(i);
  System.out.println();
  System.out.println("----       :");
  chaRu(i);
  System.out.println();
  System.out.println("----  (Shell)     :");
  shell(i);
 }
 
 // 泡の並べ替え 
public static void maoPao(int[] x) {
  for (int i = 0; i < x.length; i++) {
   for (int j = i + 1; j < x.length; j++) {
    if (x[i] > x[j]) {
     int temp = x[i];
     x[i] = x[j];
     x[j] = temp;
    }
   }
  }
  for (int i : x) {
   System.out.print(i + " ");
  }
 }
 // 並べ替えを選択 
public static void xuanZe(int[] x) {
  for (int i = 0; i < x.length; i++) {
   int lowerIndex = i;
   //          
   for (int j = i + 1; j < x.length; j++) {
    if (x[j] < x[lowerIndex]) {
     lowerIndex = j;
    }
   }
   //   
   int temp = x[i];
   x[i] = x[lowerIndex];
   x[lowerIndex] = temp;
  }
  for (int i : x) {
   System.out.print(i + " ");
  }
 }

 //     
 public static void chaRu(int[] x) {
  for (int i = 1; i < x.length; i++) {// i    ,              
   for (int j = i; j > 0; j--) {
    if (x[j] < x[j - 1]) {
     int temp = x[j];
     x[j] = x[j - 1];
     x[j - 1] = temp;
    }
   }
  }
  for (int i : x) {
   System.out.print(i + " ");
  }
 }
 // ヒルの並べ替え 
public static void shell(int[] x) {
  //   
  for (int increment = x.length / 2; increment > 0; increment /= 2) {
   //       
   for (int i = increment; i < x.length; i++) {
    int temp = x[i];
    int j = 0;
    for (j = i; j >= increment; j -= increment) {
     if (temp < x[j - increment]) {
      x[j] = x[j - increment];
     } else {
      break;
     }
    }
    x[j] = temp;
   }
  }

  for (int i : x) {
   System.out.print(i + " ");
  }
 }
}
//クイックソート
/**        */
	public static void quickSort(int[] a, int lo0, int hi0) {
		int lo = lo0;
		int hi = hi0;

		if (lo >= hi)
			return;

		//            
		boolean transfer = true;

		while (lo != hi) {
			if (a[lo] > a[hi]) {
				//     
				int temp = a[lo];
				a[lo] = a[hi];
				a[hi] = temp;
				//       ,      
				transfer = (transfer == true) ? false : true;
			}

			//            
			if (transfer)
				hi--;
			else
				lo++;

		}

		//        ,           
		lo--;
		hi++;
		quickSort(a, lo0, lo);
		quickSort(a, hi, hi0);
	}