Java:三种经典排序。

选择排序:

在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找
最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
Selection.java

package com.briup.ch04;
import java.util.Arrays;
public class Selection{

public void s1(){
    int n[] = {23,6,18,2,11};
    int i,j;
    for(i=0;i<n.length-1;i++){
        int min = i;
        //定义一个min接收a[i]角标的值,用于后面交换时调用
        for(j=i+1;j<n.length;j++){
            if(n[min]>n[j]){
                min = j;
                //把最小数的角标赋值给min,这样min的值就是数组最小数的角标。
            }
        }
        if(min!=i){
            //通过角标交换当前位与最小位的数据,min=i的时候说明无需交换
            int x = n[min];
            n[min] = n[i];
            n[i] = x;
        }
    }
    System.out.println(Arrays.toString(n));
}

public static void main(String args[]){
    Selection s = new Selection();
    s.s1();
}
}

冒泡排序:

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次
进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们
的排序与排序要求相反时,就将它们互换。
Bubble.java

import java.util.Arrays;
public class Bubble{

public void b1(){
    int n[] = {23,6,18,2,11};
    int i,j;
    for(i=1;i<n.length;i++){
    //i表示要比较的次数
        for(j=0;j<n.length-1;j++){
            if(n[j]>n[j+1]){
            //按顺序对相邻的两个数进行比较,较大的放到后面
                int tem = n[j];
                n[j] = n[j+1];
                n[j+1] = tem;
            }
        }
    }
    System.out.println(Arrays.toString(n));
}

public static void main(String args[]){
    Bubble b = new Bubble();
    b.b1();
}
}

插入排序:

排序过程的某一中间时刻,数组R被划分成两个子区间R[1..i-1](已排好序的有序区)和
R[i..n](当前未排序的部分,可称无序区)。
插入排序的基本操作是将当前无序区的第1个记录R[i]插人到有序区R[1..i-1]中适当的
位置上,使R[1..i]变为新的有序区。因为这种方法每次使有序区增加1个记录,通常称增量法。
插入排序与打扑克时整理手上的牌非常类似。摸来的第1张牌无须整理,此后每次从桌上的
牌(无序区)中摸最上面的1张并插入左手的牌(有序区)中正确的位置上。为了找到这个正确
的位置,须自左向右(或自右向左)将摸来的牌与左手中已有的牌逐一比较。
Insertion.java

import java.util.Arrays;
public class Insertion{

public void ins1(){
    int i,j;
    int a[] = {5,7,12,-9,0};
    for(i=1;i<a.length;i++){
        int tem = a[i];
        //当前需要排序的数
        for(j=i;j>0;j--){
            if(tem<a[j-1]){
                //当tem<a[j-1]把a[j-1]的值赋给a[j],也就是把tem往前移一位,直到a[j-1]>tem
                //由于从第一个开始排序,所以当a[j-1]>tem时,前面的数组排序已经完成
                a[j]=a[j-1];
                System.out.println(Arrays.toString(a));
                if(j-1==0)
                    //j=1且tem<a[j-1],交换他们的数据即可
                    a[j-1]=tem;
            }else{
                a[j]=tem;
                //当tem>a[j-1]时,
                break;
            }
        }
    }
    System.out.println(Arrays.toString(a));
}

public static void main(String args[]){
    Insertion ins = new Insertion();
    ins.ins1();
}
}

猜你喜欢

转载自blog.csdn.net/qq_38091375/article/details/81436132