• 算法 之 简单排序


    这里介绍三种常用的排序算法:冒泡排序、选择排序、插入排序。

    1.冒泡排序

    冒泡排序是一种简单的排序,它通过元素的两两比较,不断的将大的或小的元素向左或向右移动,通过这种方式来实现排序。

    如下面是实现由小到大的排序:外层循环out一开始为nElems-1,这代表元素的最大位置。内层循环从位置0和位置1的元素开始通过不断比较将较大的值放到较大的位置。当内层循环完毕后,a[nElems-1]就为最大值了。

    //.............冒泡排序..............
        public void bubbleSort(){
            int out;
            int in;
            for ( out = nElems-1; out  > 1; out--) {     //外层循环
                for ( in = 0; in < out; in++) {            //内层循环
                    if (a[in]>a[in+1]) {                //比较相邻元素的大小
                        swap(in, in+1);                    //交换
                    }
                }
            }
        }

     2.选择排序 

    选择排序是比冒泡复杂一点的排序,它是先选取一个位置,然后和其他位置的值不断比较,如果满足要求(比其他位置大或小),就交换着两个位置的值。

    如下同样实现了由小到大的排序方式:选取数组的第out个位置赋值给中间变量min,通过内层循环不断与剩下的数组元素比较,将较小值的位置赋值给min,这样在内层循环完成后位置min代表的数值一定是最小值。然后交换被选择的位置out的值和最小值min位置的值。

    //.............选择排序..................
        public void selectSort() {
            int out,in,min;
            for ( out = 0; out < nElems-1; out++) {            //外层循环
                min  = out;                                    
                for ( in = out+1; in < nElems; in++) {        //内层循环
                    if (a[in]<a[min]) {
                        min = in;        //将较大值得位置in赋值给min
                    }
                }
                swap(out, min);            //交换位置
            }
        }

    3.插入排序

    插入排序是最难理解的排序方式,同时也是最多使用的排序方式。原理是由左向右依次选择元素来作为用于插入的值,来通过和左边的数据比较来得到自己的插入位置。这个解释比较麻烦,我怕解释不好,大家直接看代码理解吧。

        //...............插入排序..........................
        public void  insertSort() {
            int out,in;
            for ( out = 1; out < nElems; out++) {    //外层循环,从第2个位置选取要插入的元素,这样左边的都是已经排好序的数据
                long temp = a[out];
                in = out;
                while(in>0&&a[in-1]>=temp){    //从选定值得左侧开始比较
                    a[in] = a[in-1];        //将所有大于temp(即选定位置out的值)的数据后移
                    --in;
                }
                a[in] = temp;        //a【in-1]<temp时,此时的in位置就是要插入的位置
            }
        }
  • 相关阅读:
    SupoSE 概述 Redmine
    tmux guake
    How to Install and Use Krugle Basic
    use webdevelop tools to delete domain specific cookies for ecommerical cps union effect
    执行hudson daemon的脚本
    python技巧26[python的egg包的安装和制作]
    HOWTO Modular Xorg
    ARC专题:再续 Xcode 4.2 中的Automatic Reference Counting (ARC)
    ARC专题:在Xcode 4.2中加入不支持ARC的源码
    Windows下的.NET+ Memcached安装
  • 原文地址:https://www.cnblogs.com/mercuryli/p/4991503.html
Copyright © 2020-2023  润新知