zoukankan      html  css  js  c++  java
  • 算法 之 简单排序

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

    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位置就是要插入的位置
            }
        }
  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/mercuryli/p/4991503.html
Copyright © 2011-2022 走看看