您的位置:首页 > 其它

冒泡排序和选择排序

2015-11-07 14:35 190 查看
两种很简单的排序方法,冒泡排序和选择排序。

下面按照从小到大排序来做说明:

冒泡排序:每次将未排序的数组从前往后两个相邻的元素作比较,如果前面的元素比后一个元素小,那么将这两个元素交换,那么实质上这种交换是将大的元素往后移动了一位,这样一遍排序之后,最大的元素就被放到数组的最后。然后对前面的n -1 个元素重复这个过程。

选择排序:选择排序实际上对冒泡排序做了一定的改进,它也是每次把两个元素作比较,但是这种比较不是两个相邻的元素之间,而是所有元素之间,这种所有元素的比较中,可以找出最小元素,然后放在第一位(这样就避免了冒泡排序中,可以避免的元素交换),后面的步骤以此类推。

两种排序十分的相识,算法的时间复杂度都是O(n2),但是两种算法的重要区别之一就是冒泡排序是稳定的,但是选择排序是不稳定的算法。比如[99,99,5] ,如果我想把从前往后把最大的放到最后面,那么第一个99就放到了第二个99的后面。相对位置发生了改变。

下面是实现的代码:

冒泡排序:

/**
* Created by Neway on 2015/11/7.
*/
public class BubbleSort implements Sort {

@Override
public void sort(int[] arr) {
for(int i = 0 ; i < arr.length; i++) {
for(int j = 0 ; j < arr.length - i - 1; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
}
}


选择排序:

/**
* Created by Neway on 2015/11/7.
*/
public class PickSort implements Sort {

/**
* 每次从待排序的数组中选出一个最小的值放在排好序数组的最后面
*
* @param arr
*/
@Override
public void sort(int[] arr) {

int minValue = Integer.MIN_VALUE;

for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}

int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息