欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

冒泡排序,选择排序,插入排序,归并排序

程序员文章站 2022-05-12 16:34:09
...
package com.sort;

import org.junit.Test;

public class SortTest {
	int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

	@Test
	public void testMapPao() {
		// maoPaoSort(arr);
		// xuanzeSort(arr);
		// insertSort(arr);
		// mergeSort(arr, 0, (arr.length - 1) / 2, arr.length - 1);
                quickSort(arr,0,arr.length-1)
		printArr(arr);
	}

	public static void printArr(int[] arr) {
		for (int i : arr) {
			System.out.print(i + ",");
		}
	}

	/**
	 * 冒泡
	 * 
	 * @param arr
	 */
	public static void maoPaoSort(int[] arr) {
		int len = arr.length;
		int temp;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - 1 - i; j++) {
				if (arr[j] > arr[j + 1]) {
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}

	/**
	 * 选择
	 * 
	 * @param arr
	 */
	public static void xuanzeSort(int[] arr) {
		int len = arr.length;
		int temp;
		for (int i = 0; i < len - 1; i++) {
			int index = i;
			for (int j = i + 1; j < len; j++) {
				if (arr[j] < arr[index]) {
					index = j;
				}
			}
			if (index != i) {
				temp = arr[i];
				arr[i] = arr[index];
				arr[index] = temp;
			}
		}
	}

	/**
	 * 插入
	 * 
	 * @param arr
	 */
	private void insertSort(int[] arr) {
            for (int i = 1; i < arr.length; i++) {
                int tempIndex = 0;
                int tempValue = arr[i];
                for (int j = i - 1; j >= 0; j--) {
                    if (tempValue < arr[j]) {
                        arr[j + 1] = arr[j];
                    } else {
                        tempIndex = j + 1;
                        break;
                    }
                }
                arr[tempIndex] = tempValue;
            }
        }

	/**
	 * 归并
	 * 
	 * @param arr
	 * @param left
	 * @param center
	 * @param right
	 */
	public static void mergeSort(int[] arr, int left, int center, int right) {
		// base
		if (left == right) {
			return;
		}

		// merge
		mergeSort(arr, left, (left + center) / 2, center);
		mergeSort(arr, center + 1, (center + 1 + right) / 2, right);

		// detail
		int[] sortArr = new int[right + 1 - left];
		int curLeft = left;
		int curRight = center + 1;
		int index = 0;
		while (curLeft <= center && curRight <= right) {
			if (arr[curLeft] <= arr[curRight]) {
				sortArr[index++] = arr[curLeft++];
			} else {
				sortArr[index++] = arr[curRight++];
			}
		}

		while (curLeft <= center) {
			sortArr[index++] = arr[curLeft++];
		}

		while (curRight <= right) {
			sortArr[index++] = arr[curRight++];
		}

		for (int i = 0; i < sortArr.length; i++) {
			arr[left + i] = sortArr[i];
		}
	}

    /**
     * 快速排序简易实现
     * @param arr
     * @param begin
     * @param end
     */
    public static void quickSort(int[] arr, int begin, int end) {
        //base
        if (begin >= end) {
            return;
        }
        //detail
        int leftIndex = begin;
        int rightIndex = end - 1;
        int tempIndex = end;

        while (leftIndex < rightIndex) {
            while (leftIndex < rightIndex && arr[leftIndex] < arr[tempIndex]) {
                leftIndex++;
            }
            while (rightIndex > leftIndex && arr[rightIndex] >= arr[tempIndex]) {
                rightIndex--;
            }
            if (rightIndex != leftIndex) {
                int temp = arr[leftIndex];
                arr[leftIndex] = arr[rightIndex];
                arr[rightIndex] = temp;
            }
        }

        //leftIndex = rightIndex
        if (arr[leftIndex] >= arr[tempIndex]) {
            int temp = arr[leftIndex];
            arr[leftIndex] = arr[tempIndex];
            arr[tempIndex] = temp;
        } else {
            leftIndex = tempIndex;
        }
        //merge
        quickSort(arr, begin, leftIndex - 1);
        quickSort(arr, leftIndex + 1, end);
    }

}

冒泡排序:http://baike.sogou.com/v111984.htm?fromTitle=冒泡排序

选择排序:http://baike.sogou.com/v7538686.htm?fromTitle=选择排序

插入排序:http://baike.sogou.com/v7832934.htm?fromTitle=插入排序

归并排序:http://baike.sogou.com/v8340582.htm?fromTitle=归并排序