排序算法算是常见的面试题吧,也是锻炼思维的一种方式。目前找到最好的介绍排序的博客是《八大排序算法总结与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.length-1; i++) {
//没有进行交换表示数组已经为有序状态,可提前结束循环
boolean isOver = true;
for (int j=0; j<arr.length-1; j++) {
if (arr[j] > 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; i<arr.length; i++) {
for (int j=i; j>0; 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;
}
}