首页 > 编程语言 > 详细

简单的排序方法(冒泡排序,选择排序,插入排序)

时间:2017-02-09 00:55:50      阅读:255      评论:0      收藏:0      [点我收藏+]

对数据进行排序可以方便我们检索数据,例如二分查找法比线性查找法通常要快,然而二分查找只能用于有序的数据。

这里仅仅列出三种简单排序方法的Java实现:冒泡排序,选择排序,插入排序。较为复杂的排序方法如希尔排序,快速排序,归并排序暂不描述。

冒泡排序:

public void BubbleSort(){
    int out, in;
        
    for (out = n - 1; out > 1; out--) //外部循环
        for (in = 0; in < out; in++) //内部循环
            if(a[in] > a[in + 1]){  //交换位置
                int temp = a[in];
                a[in] = a[in + 1];
                a[in + 1] = temp;
                }
    }

选择排序:

public void SelectionSort(){
    int out, in, min;
    
    for (out = 0; out < n - 1; out++){ //外部循环
        min = out;  //选择初始值作为最小
        for (in = out + 1; in < n; in++)  //内部循环
            if (a[in] < a[min])  //一次循环选出最小值的Index
                min = in; 
        int temp = a[out];  //交换初始值和最小值
        a[out] = a[min];
        a[min] = temp; 
    }
}

插入排序:

public void InsertionSort(){
    int in, out;
    
    for (out = 1; out < n; out++){  //out is dividing line
        int temp = a[out];  //remove marked item
        in = out;  //start shifts at out
        while (in > 0 && a[in -1] >= temp){
            //until one is smaller
            a[in] = a[in - 1]; //shift item right
            in--;  //go left one positin
        }
        a[in] = temp; //insert marked item
    }
}

以上三种排序方法的时间复杂度都为O(N2)

冒泡排序:交换和比较操作都和N2成正比;

选择排序:将必要的交换次数降为O(N),然而比较次数仍为O(N2);

插入排序:复制的次数大致等于比较的次数,对于随机数据,插入排序比冒泡排序快一倍,比选择排序略快。对于已经有序或者基本有序的数据来说,插入排序要好很多。当数据有序的时候,while循环的条件总是false,所以就变成了外层循环中的一个简单的语句,执行N-1次

简单的排序方法(冒泡排序,选择排序,插入排序)

原文:http://www.cnblogs.com/lahwf/p/6380316.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!