1? Java排序算法?
? package com.cucu.test;
/**
?* @author http://www.linewell.com <a href=mailto:cg@linewell.com>cg@linewell.com</a>
?* @version 1.0
?*/
public class Sort {
? public void swap(int a[], int i, int j) {
??? int tmp = a[i];
??? a[i] = a[j];
??? a[j] = tmp;
? }
? public int partition(int a[], int low, int high) {
??? int pivot, p_pos, i;
??? p_pos = low;
??? pivot = a[p_pos];
??? for (i = low + 1; i <= high; i++) {
????? if (a[i] > pivot) {
??????? p_pos++;
??????? swap(a, p_pos, i);
????? }
??? }
??? swap(a, low, p_pos);
??? return p_pos;
? }
? public void quicksort(int a[], int low, int high) {
??? int pivot;
??? if (low < high) {
????? pivot = partition(a, low, high);
????? quicksort(a, low, pivot - 1);
????? quicksort(a, pivot + 1, high);
??? }
? }
? public static void main(String args[]) {
??? int vec[] = new int[] { 37, 47, 23, -5, 19, 56 };
??? int temp;
??? //選擇排序法(Selection Sort)
??? long begin = System.currentTimeMillis();
??? for (int k = 0; k < 1000000; k++) {
????? for (int i = 0; i < vec.length; i++) {
??????? for (int j = i; j < vec.length; j++) {
????????? if (vec[j] > vec[i]) {
??????????? temp = vec[i];
??????????? vec[i] = vec[j];
??????????? vec[j] = temp;
????????? }
??????? }
????? }
??? }
??? long end = System.currentTimeMillis();
??? System.out.println("選擇法用時為:" + (end - begin));
??? //打印排序好的結果
??? for (int i = 0; i < vec.length; i++) {
????? System.out.println(vec[i]);
??? }
??? //? 冒泡排序法(Bubble Sort)
??? begin = System.currentTimeMillis();
??? for (int k = 0; k < 1000000; k++) {
????? for (int i = 0; i < vec.length; i++) {
??????? for (int j = i; j < vec.length - 1; j++) {
????????? if (vec[j + 1] > vec[j]) {
??????????? temp = vec[j + 1];
??????????? vec[j + 1] = vec[j];
??????????? vec[j] = temp;
????????? }
??????? }
????? }
??? }
??? end = System.currentTimeMillis();
??? System.out.println("冒泡法用時為:" + (end - begin));
??? //打印排序好的結果
??? for (int i = 0; i < vec.length; i++) {
????? System.out.println(vec[i]);
??? }
??? //插入排序法(Insertion Sort)
??? begin = System.currentTimeMillis();
??? for (int k = 0; k < 1000000; k++) {
????? for (int i = 1; i < vec.length; i++) {
??????? int j = i;
??????? while (vec[j - 1] < vec[i]) {
????????? vec[j] = vec[j - 1];
????????? j--;
????????? if (j <= 0) {
??????????? break;
????????? }
??????? }
??????? vec[j] = vec[i];
????? }
??? }
??? end = System.currentTimeMillis();
??? System.out.println("插入法用時為:" + (end - begin));
??? //打印排序好的結果
??? for (int i = 0; i < vec.length; i++) {
????? System.out.println(vec[i]);
??? }
??? //快速排序法(Quick Sort)
??? Sort s = new Sort();
??? begin = System.currentTimeMillis();
??? for (int k = 0; k < 1000000; k++) {
????? s.quicksort(vec, 0, 5);
??? }
??? end = System.currentTimeMillis();
??? System.out.println("快速法用時為:" + (end - begin));
??? //打印排序好的結果
??? for (int i = 0; i < vec.length; i++) {
????? System.out.println(vec[i]);
??? }
? }
}
以下是運行結果:
選擇法用時為:234
56
47
37
23
19
-5
冒泡法用時為:172
56
47
37
23
19
-5
插入法用時為:78
56
47
37
23
19
-5
快速法用時為:297
56
47
37
23
19
-5?
posted on 2006-09-01 10:31
水煮三國 閱讀(461)
評論(1) 編輯 收藏 所屬分類:
J2SE