用Java实现各种排序(1)---冒泡排序,直接插入排序,简单选择排序

排序算法是数据结构中经常遇到的问题,也是各种面试机试的极大热衷。笔者在准备找工作的过程中,通过《大话数据结构》一书进行复习,其中的编程是用C实现的。由于我要找的工作方向是Java,就把这些算法用Java实现了一遍,其实总体思想是一样的,只是自己记录总结一下,加深印象。

冒泡排序

冒泡排序作为最基础最容易理解的排序,其方法就是通过比较相邻的数据,如果反序则,直到没有需要交换的数据时就排序完成。冒泡排序的时间复杂度为O(n*n)。具体代码如下:

public class sort_maopao {
public static void main(String[] args) {

    int[] a={2,5,4,3,5,7,9,8,6,15,11};
    sort3(a);
    for(int i=0;i<a.length;i++)
    System.out.print(a[i]+" ");
}
public static void sort(int[] a){
    boolean flag=true;    //flag用来标记是否在本次循环中进行了数据交换,如果没有,则排序完成
    for(int i=0;i<a.length-1&&flag;i++){ 
        flag=false;
        for(int j=a.length-2;j>=i;j--){  //从后往前进行排序,可以在每次的交换中,使得较小的数据向前移动
            if(a[j]>a[j+1]){
                swap(a,j,j+1);
                flag=true;
            }
        }
    }
}
public static void swap(int[] a, int i,int j){
    int temp=0;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}

}

直接插入排序

直接插入排序的思想是把一个数插入到一个有序队列中,其时间复杂度为O(n*n)。具体代码如下:

public class sort_insertSort {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] a={2,5,4,3,5,7,9,8,6,15,11};
    sort(a);
    for(int i=0;i<a.length;i++)
    System.out.print(a[i]+" ");
}

public static void swap(int[] a, int i,int j){
    int temp=0;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}

public static void sort(int[] a){
    int temp;
    for(int i=2;i<a.length;i++){     //先把数组第一个数当成是有序的,从第二个数开始进行插入
        if(a[i]<a[i-1]){ 
            temp=a[i];   //用temp记录待插入的数据
            int j;
            for(j=i-1;a[j]>temp;j--){  //如果已排序部分的数据大约待插入数据,则数据后移
                a[j+1]=a[j];
            }
            a[j+1]=temp;    //插入数据,由于前面对j--了,所以这里j要加1
        }
    }
}
}

简单选择排序

简单选择排序就是通过n-i比较,每次找到n-i+1个数中最小的数,将其与第i个数交换。简单选择排序的时间复杂度也是O(n*n)。具体代码如下:

public class sort_simpleSort {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] a={2,5,4,3,5,7,9,8,6,15,11};
    sort(a);
    for(int i=0;i<a.length;i++)
    System.out.print(a[i]+" ");
}
 //每一次都找到最小的一个数,放在最前面
public static void sort(int[] a){
    int min=0;
    for(int i=0;i<a.length-1;i++){
        min=i;
        for(int j=i+1;j<a.length;j++){
            if(a[j]<a[min]){
                    min=j;    //记录最小数的位置
            }
        }
        if(i!=min)    //判断是否相等,如果不相等则进行交换
        swap(a,i,min);
    }
}

public static void swap(int[] a, int i,int j){
    int temp=0;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}
}


以上是三种最基本的算法,它们的计算复杂度都是一样的,适合小规模的排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值