您的位置:首页 > 编程语言 > Java开发

冒泡排序、选择排序、直接插入排序(java实现)

2016-10-08 23:01 525 查看
冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序就交换,直到没有反序的记录为止。我的理解就是,从底部开始将最小的慢慢的推到第一个这样重复:

import java.util.*;
public class BubbleSort{

public int[] bubbleSort(int[] a){
int tmp;
boolean flag = true;
for(int i = 0; i < a.length - 1 && flag; i++){
flag = false;
for(int j = a.length - 1; j > i; j--){
if (a[j-1] > a[j]) {
tmp = a[j-1];
a[j-1]=a[j];
a[j]=tmp;
flag = true;
}
}
}
return a;
}

public static void main(String[] args){
BubbleSort b = new BubbleSort();
int[] a = new int[]{2,3,8,6,7,1,4,9,5};
System.out.println(Arrays.toString(b.bubbleSort(a)));
}
}


选择排序,我的理解就是先循环一遍,把最小元素找出到,记录其下标,和第一个元素交换,然后从第二个元素开始循环,找出最小,交换,这样直到最后一个元素

这个名字不太直接常常忘记其内容,选择排序,选择啥呢?咋选择呢?今天起床之后迟迟没有想起来估计也是不太熟练导致的,选择排序就是选择最小的,然后和第一个元素去交换,这样就不用去管第一个元素了,因为它总是最小的,所以从第二个数再去寻找最小的,找到之后在和第二个数去交换,这样前两个数就是最小的。所以选择排序总是保证了前面的顺序已经排好了。

import java.util.*;
public class SelectSort{

public int[] selectSort(int[] a){
int tmp;
int min;
for(int i = 0; i < a.length -1; i++){
min = i;
for(int j = i + 1; j < a.length; j++){
if(a[min] > a[j]){
min = j;
}
}
if(i != min){
tmp = a[i];
a[i] = a[min];
a[min] = tmp;

}
}
return a;
}

public static void main(String[] args){
SelectSort s = new SelectSort();
int[] a = new int[]{2,3,8,6,7,1,4,9,5,10,0,5,1};
System.out.println(Arrays.toString(s.selectSort(a)));
}
}


直接插入排序:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

上面的定义我一开始也没有弄懂,其实这个过程就像我们打扑克的时候,当随手拿起一副牌的时候,比如大小是5,3,6,4,我们总是下意识的将3换到5的前面变成3,5,6,4,然后把4放入3和5之间,这样就变成了3,4,5,6。直接插入排序基本上是模拟了这一行为。

public class InsertSort{
public void insertSort(int[] a){
int tmp = 0;
for(int i = 1; i < a.length; i++){
int j = i-1;
//tmp保存了当前的序号为i的值
tmp = a[i];
for(;j >= 0 && tmp < a[j]; j--){
a[j+1]=a[j];  //后移数据
}
//到这的时候我一开始不能理解,j+1不是赋值了两次么?,后来注意到j--,如果上面的循环执行了,出来的时候其实是j--的值.
a[j+1]=tmp;
}
}
}


暂时就这样,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐