码迷,mamicode.com
首页 > 编程语言 > 详细

java实现排序算法:快排、冒泡排序、选择排序、插入排序、归并排序

时间:2018-01-23 15:46:03      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:表示   gpo   最大   算法   排序算法   his   比较   pre   java   

一、概述:本文主要介绍常见的几种排序算法的原理以及java实现,包括:冒泡排序、选择排序、插入排序、快速排序、归并排序等。

二、冒泡排序:

(1)原理:

  1、从第一个数据开始,与第二个数据相比较,如果第二个数据小于第一个数据,则交换两个数据的位置。

  2、指针由第一个数据移向第二个数据,第二个数据与第三个数据相比较,如果第三个数据小于第二个数据,则交换两个数据的位置。

  3、依此类推,完成第一轮排序。第一轮排序结束后,最大的元素被移到了最右面。

  4、依照上面的过程进行第二轮排序,将第二大的排在倒数第二的位置。

  5、重复上述过程,没排完一轮,比较次数就减少一次。

(2)例子:

待排序数据:7, 6, 9, 8, 5,1

第一轮排序过程:指针先指向7,7和6比较,6<7,交换6和7的位置,结果为:6,7,9,8,5,1

        指针指向第二个元素7,7和9比较,9>7,不用交换位置,结果仍为:6,7,9,8,5,1

        指针指向第三个元素9,比较9和8,8<9,交换8和9的位置,结果为:6,7,8,9,5,1

        指针指向第四个元素9,比较9和5,5<9,交换5和9,结果为:6,7,8,5,9,1

        指针指向第五个元素9,比较9和1,1<9,交换1和9的位置,结果为6,7,8,5,1,9

第一轮排序结束后,最大的数字9被移到了最右边。

进行第二轮排序,过程同上,只是由于最大的9已经放在最右边了,因此不用在比较9了,少了一次比较,第二轮结束的结果为:6,7,5,1,8,9

第三轮结果:6,5,1,7,8,9

第四轮比较结果:5,1,6,7,8,9

第五轮比较结果:1,5,6,7,8,9

最终排序结果为:1,5,6,7,8,9,由上可知N个数据排序,需要进行N-1轮排序;第i轮排序需要的比较次数为N-i次。

(3)编码思路:

  需要两层循环,第一层循环i表示排序的轮数,第二层循环j表示比较的次数。

(4)代码实现:

 

package com.test.insertsort;
/**
 * 冒泡排序
 * @author bjh
 *
 */
public class BobSort {
    
    private int[] array;
    private int length;
    
    /**
     * 构造函数
     * @param array
     */
    public BobSort(int[] array){
        this.array = array;
        this.length = array.length;
    }
    
    /**
     * 打印数组中数据
     */
    public void display(){
        for(int i : array){
            System.out.print(i+" ");
        }
        System.out.println();
    }
    
    /**
     * 冒泡排序
     */
    public void bobSort(){
        for(int i=0;i<length-1;i++){//排序轮数
            for(int j=0;j<length-1-i;j++){//比较次数
                if(array[j]>array[j+1]){
                    int temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
            this.display();
        }
    }
    
    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args){
        int[] array = {77,29,28,36,33,25,10};
        BobSort bobSort = new BobSort(array);
        System.out.println("排序前的数据为:");
        bobSort.display();
        bobSort.bobSort();
        System.out.println("排序后的数据为:");
        bobSort.display();
    }
}

(5)冒泡排序算法总结:

  N个元素需要排序N-1轮;

  第i轮需要比较N-i次;

  N个元素排序,需要比较n(n-1)/2次;

  冒泡排序的算法复杂度较高,为O(n*n)

 

java实现排序算法:快排、冒泡排序、选择排序、插入排序、归并排序

标签:表示   gpo   最大   算法   排序算法   his   比较   pre   java   

原文地址:https://www.cnblogs.com/bjh1117/p/8335628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!