【算法】Java中的常见排序Sort

排序算法算是常见的面试题吧,也是锻炼思维的一种方式。目前找到最好的介绍排序的博客是《八大排序算法总结与java实现》,主要是参考这个

  • 冒泡排序 Bubble Sort
  • 插入排序 Insertion Sort
  • 快速排序 Quick Sort
  • 选择排序 Selection Sort
  • 希尔排序 Shell Sort
  • 堆排序 Heap Sort
  • 归并排序 Merging Sort
  • 基数排序 Radix Sort

冒泡排序 Bubble Sort

这个是学C语言时遇到的第一个排序算法

/**
 * @param arr
 * @return
 * @description 冒泡排序
 * @author paul
 * @date 2017年5月30日 下午9:49:35
 * @update 2017年5月30日 下午9:49:35
 * @version V1.0
 */
public static void bubbleSort(int[] arr) {
	//数据长度只有1,则本身就是有序的
	if (arr.length == 1)
		return;
	int temp;
	for (int i=0; i arr[j+1]) {
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
				isOver = false;
			}
		}
		if (isOver)
			break;
	}
}

插入排序 Insertion Sort

/**
 * @param arr
 * @return
 * @description 插入排序
 * @author paul
 * @date 2017年5月30日 下午10:09:52
 * @update 2017年5月30日 下午10:09:52
 * @version V1.0
 */
public static void insertSort(int[] arr) {
	//数据长度只有1,则本身就是有序的
	if (arr.length == 1)
		return;
	int temp;
	for (int i=1; i0; j--) {
			if (arr[j] < arr[j-1]) {
				temp = arr[j];
				arr[j] = arr[j-1];
				arr[j-1] = temp;
			}
		}
	}
}

快速排序 Quick Sort

参考:《 啊哈!算法》

快排的重要思想是分治,进行切分后排序。

/**
 * @param arr
 * @return
 * @description 快速排序
 * @author paul
 * @date 2017年5月30日 下午10:15:35
 * @update 2017年5月30日 下午10:15:35
 * @version V1.0
 */
public static void quickSort(int[] arr, int left, int right) {
	//数据长度只有1,则本身就是有序的
	if (arr.length == 1 || left > right)
        return;
	int i=left,j=right,temp=arr[left],t;//temp存的是基准数
	while (i != j) {
		//顺序很重要,先从右往左找
		while (arr[j] >= temp && j > i)
			j--;
		//在从左往右找
		while (arr[i] <= temp && i < j)
			i++;
		//交换两个数在数组中的位置
		if (i < j) {
			t = arr[i];
			arr[i] = arr[j];
			arr[j] = t;
		}
	}
	//最终将基准数归位
	arr[left] = arr[i];
	arr[i] = temp;
	quickSort(arr, left, i - 1);
	quickSort(arr, i + 1, right);
}

选择排序 Selection Sort

/**
 * 选择排序
 * @param arr
 */
public static void selectionSortTest(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        int min = arr[i];
        int index = i;
        for (int j = i; j < arr.length; j++) {
            if (arr[j] < min) {
                min = arr[j];
                index = j;
            }
        }
        arr[index] = arr[i];
        arr[i] = min;
    }
}

未完待续…

你可能感兴趣的:(排序,算法)