以由小到大排序为例。介绍三种时间复杂度为的方法。
参考博文 blog.csdn.net/meibenxiang…
1.冒泡排序
1.比较相邻元素。 第一个比第二个大,则交换。从开始第一对到结尾的最后一对。最后是排序区的最大值。
2.针对所有的元素重复以上的步骤,除了排序区的值。
持续对越来越少的元素重复上面的步骤,直到所有数进入排序区。
//升序
public static int[] bubbleSort(int[] array){
if(array.length == 0 || array.length == 1) return array;
for(int i = array.length - 1; i >= 0; i--){
for(int j = 0; j < array.length - 1; j++){
if(array[j] > array[j + 1]){
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
return array;
}
贴一个写得很详细的博客 www.cnblogs.com/bigdata-sto…
2.选择排序
1.在未排序序列中找到最小元素,放到排序序列的首位。
2.在未排序元素中继续寻找最小元素,放到已排序序列的末尾。
未排序的首元素作基准,遍历剩余元素,找最小。如果在剩余元素中找到最小,则交换。
重复第二步,直到所有元素均排序完毕。
public static int[] selectionSort(int[] array){
if(array.length == 0 || array.length == 1) return array;
for(int i = 0; i < array.length; i++){
int minIndex = i;
for(int j = i; j < array.length; j++){
minIndex = array[j] < array[minIndex] ? j: minIndex;
}
if(minIndex != i){
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
return array;
}
3.插入排序
1.从第一个元素开始,该元素可以认为已经被排序;
2.取出下一个元素,在左排序区中从后向前扫描;
3.如果左排序区的元素大于新元素,新元素移到下一位置,直到找到已排序的元素小于或者等于新元素的位置;
4.将新元素插入到该位置,重复直到所有元素均排序完毕。
public static int[] insertionSort(int[] array){
if(array.length == 0 || array.length == 1) return array;
for(int i = 1; i < array.length; i++){
for(int j = i - 1; j >= 0; j--){
if(array[j] > array[j + 1]){
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}