原题入口
描述
给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
样例
样例 1:
输入: [3, 2, 1, 4, 5]
输出: [1, 2, 3, 4, 5]
样例解释:
返回排序后的数组。
样例 2:
输入: [1, 1, 2, 1, 1]
输出: [1, 1, 1, 1, 2]
样例解释:
返回排好序的数组。
public class Solution {
/**
* @param A: an integer array
* @return: nothing
*/
public void sortIntegers(int[] A) {
// write your code here
this.shellSort(A);
}
/**
* 交换数组元素
*/
public int[] exchangeArrayElement(int[] array, int index1, int index2) {
int val = array[index1];
array[index1] = array[index2];
array[index2] = val;
return array;
}
/**
* 冒泡排序
*/
public int[] bubbleSort(int[] array) {
for(int i = 0; i < array.length - 1; i++) {
for(int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
array = this.exchangeArrayElement(array, j, j + 1);
}
}
}
return array;
}
/**
* 选择排序
*/
public int[] selectionSort(int[] array) {
int minIndex;
for (int i = 0; i < array.length; i++) {
minIndex = i;
for (int j = i + 1; j < array.length; j++) {
if(array[minIndex] > array[j]) {
minIndex = j;
}
}
if (minIndex != i) {
array = this.exchangeArrayElement(array, minIndex, i);
}
}
return array;
}
/**
* 插入排序
*/
public int[] insertionSort(int[] array) {
int currentVal;
for (int i = 1; i < array.length; i++) {
currentVal = array[i];
int j;
for (j = i - 1; j >= 0; j--) {
if(array[j] > currentVal) {
array[j + 1] = array[j];
} else {
break;
}
}
array[j + 1] = currentVal;
}
return array;
}
/**
* 希尔排序
*/
public int[] shellSort(int[] array) {
int len = array.length;
int temp;
for (int step = len / 2; step > 0; step /= 2) {
for (int i = step; i < len; i++) {
temp = array[i];
int j = i - step;
while (j >= 0 && array[j] > temp) {
array[j + step] = array[j];
j -= step;
}
array[j + step] = temp;
}
}
return array;
}
}