Java里的冒泡排序、直接选择排序和反转排序

52 篇文章 2 订阅

1、冒泡排序

基本思想

    通过对数组中相邻元素的比较与位置交换,使得数值较小的元素如气泡一般逐渐往上"漂浮"到"水面"。
    这里,按照从小到大进行排序,整个算法是从数值最小的元素开始,对每个相邻元素进行比较,且使数值较小的元素换至数值较大的元素位置上,使得经过一趟冒泡排序后,数值较小的元素到达最上端;接着,再在剩下的元素中寻找此轮中数值次小的元素,并把它换到第二个的位置上。依次类推,直到数组中所有的元素有序为止。

冒泡排序代码

//BubbleSort.java

//冒泡排序
public class BubbleSort {
    public void sort(int[] array) {
        for(int i=1; i<array.length; i++) {
            for(int j=0; j<array.length-i; j++) {
                if (array[j] > array[j+1]) {
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        showArray(array);
    }

    public void showArray(int[] array) {
        for(int i :array) {
            System.out.print(" "+i);
        }
        System.out.println();
    }
}

2、直接选择排序

基本思想

    假设元素存放在数组R[0…n-1]里,其中R[0,i-1]是有序区,R[i,n-1]是无序区,且有序区里的所有元素均小于无序区里的所有元素。则需要将R[i]添加到R[0,i-1]之中,使得新的R[0,i]成为有序的。即,每一趟排序从无序区R[i,n-1]中选取一个最小元素R[k],将其与R[i]进行交换( R[k] <=> R[i]),使得R[0,i]变成了新的有序区,直到 i ++自加到 i ==n-1(即n-1轮排序),排序完成。

直线选择排序代码

//SelectSort.java

//直接选择排序
public class SelectSort {
    public void sort(int[] array) {
        int index;
        for(int i=1; i<array.length; i++) {
            index = 0;
            for(int j=1; j<=array.length-i; j++) {
                if(array[j] > array[index]) {
                    index = j;
                }
            }

            int temp = array[array.length-i];
            array[array.length-i] = array[index];
            array[index] = temp;
        }
        showArray(array);
    }

    public void showArray(int[] array) {
        for(int i :array) {
            System.out.print(" "+i);
        }
        System.out.println();
    }
}

3、反转排序

基本思想

    反转排序的基本思想,将一个数组的头尾元素进行对调,即第1个元素与倒数第1个元素对调,第2个元素与倒数第2个元素,直到全部元素对调完成。

反转排序代码

//ReverseSort.java

//反转排序
public class ReverseSort {
    public void sort(int[] array) {
        int temp;
        int len = array.length;
        for(int i=0; i<len/2; i++) {
            temp = array[i];
            array[i] = array[len-1-i];
            array[len-1-i] = temp;
        }
        showArray(array);
    }

    public void showArray(int[] array) {
        for(int i :array) {
            System.out.print(" "+i);
        }
        System.out.println();
    }
}

4、主函数

//First.java

import java.util.Arrays;

public class First {
	public static void main(String args[]) {
	
        //1) 冒泡排序
//        int array[] = {63,4,24,1,3,15};
//        System.out.print("排序前:");
//        dispArray(array);
//
//        System.out.print("排序后:");
//        BubbleSort myBubble = new BubbleSort();
//        myBubble.sort(array);



//        //2) 直接选择排序
//        int array[] = {63,4,24,1,3,15};
//        System.out.print("排序前:");
//        dispArray(array);
//
//        System.out.print("排序后:");
//        SelectSort mySelect = new SelectSort();
//        mySelect.sort(array);


        //3) 反转排序
        int array[] = {63,4,24,1,3,15};
        System.out.print("排序前:");
        dispArray(array);;

        System.out.print("排序后:");
        ReverseSort myReverse = new ReverseSort();
        myReverse.sort(array);
    }

    public static void dispArray(int[] array) {
        for(int i :array) {
            System.out.print(" "+i);
        }
        System.out.println();
    }
}

参考文献

    [1] 李春葆.喻丹丹.数据结构习题与解析.第3版.2006

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值