O(n^2)类型的几种排序算法

来源:互联网 时间:2016-11-10

一、冒泡排序

1.原理

(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个;

(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数;

(3)针对所有的元素重复以上的步骤,除了最后一个;

(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.一个直接但是低效的实现

public void sort(int[] array) {

//外层循环从第0个元素遍历到倒数第二个元素,主要是用来控制内层循环的次数

//因为外层循环每跑一次,最大的数就会到最后面

for (int i = 0; i < array.length - 1; i++) {

//内层循环,遍历数组的每一个数(每一趟遍历的数量都在减小,因为最后面的是不需要比较的)

//如果前面的比后面的大,就交换这俩个数

for (int j = 0; j < array.length - i - 1; j++) {

if (array[j] > array[j+1]) {

int temp = array[j+1];

array[j+1] = array[j];

array[j] =temp;

}

}

}

}

 

3.优化版本(优化的地方是,如果遍历了一次,发现没有任何交换,那么说明已经排好序了,后面就可以不用排了)

public void sort(int[] array) {

boolean swaped;

int n = array.length;

do {

swaped = false;

for (int i = 1; i < n; i++) {

if (array[i - 1] > array[i]) {

//如果这趟有两个元素换过位置,那么是否排过序设置成true

//一旦有某一趟没有任何两个元素换过位置,说明已经排好了,整个排序过程可以停止了

int temp = array[i - 1];

array[i - 1] = array[i];

array[i] = temp;

swaped = true;

}

}

n--;

} while (swaped);

}

 

 

 

 

二、选择排序

三、插入排序

四、希尔排序

 

相关阅读:
Top