博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法之一
阅读量:4051 次
发布时间:2019-05-25

本文共 1519 字,大约阅读时间需要 5 分钟。

插入排序

思想:每次插入第K+1到前K个有序数组中一个合适位置, K从0开始到N-1, 从而完成排序。
以下为核心算法:此处为 从数组的第from位置到from + len, 进行数据升序排列。
public void sortTest(int[] array, int from, int len){
        int tmp;
        for (int i = from + 1; i < from + len; i++) { //i从开始位置from到结束位置,from + len,开始循环
            for(int j= from; j<i; j++) {   
                if(array[j]>array[i] ){ //此处如果改为array[j]<array[i], 则为降序排列
                    tmp = array[j] ;
                    array[j] = array[i] ;
                    array[i] = tmp ;
                }
            }
        }
}
冒泡排序
思想:这个可能是最简单的排序算法了, 每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置, i从0一直
到n-1从而完成排序。
此外也可以从数组开始端开始比较相邻两元素, 把第i大的冒泡到数组的第n-1个位置, i从0到n-1从而完成排序。
以下为核心算法:此处为 从数组的第from位置到from + len, 进行数据升序排列。
public final void bubble_down(int[]array, int from, int len){ i从开始位置from到结束位置,from + len,开始循环
        for(int i=from; i<from+len; i++) {
            for(int j=from+len-1; j>i; j--) { //当i一定的时候, j在[i, from+len-1]范围内比较大小
                if(array[j].compareTo(array[j-1])<0 ){//如果array[j]<array[j-1], 那么调用下面的swap()方法进行置换数据,从而进行升序排列
                    swap(array,j-1,j) ;
                }
            }
        }
    }
选择排序
思想: 选择排序相对于冒泡来说, 它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素的位置, 最后跟第i
个元素交换, 从而保证数组最终的有序。而相对于插入排序来说, 选择排序每次选出的都是全局第i小的, 不会调整前i个元
素了。
以下为核心算法:此方法有个特别之处, i的范围是[0,len],当i一定的时候, j的范围是[i+from, from+len],那么先是在这
个范围内取值array[j]和array[i]相比较, 然后把最小的那个和array[i]更换位置,

所以此方法为前len个和从from开始的len个进行对调,从而进行排序。

public void sort(E[] array, int from, int len){
        for(int i=0; i<len; i++)
            int smallest = i ;  
            int j = i+from ;   
            for(;j<from+len;j++) {     
                if(array[j].compareTo(array[smallest])<0 ){   
                    /**
                     * 小于零则为升序, 大于零则为降序。
                     */
                    smallest = j ;
                }
            }
            swap(array,i,smallest) ;
        }
    }
PS:从测试的角度看, 算法或多或少存在些问题,

第一:边界问题,

第二, 是否存在已经提前排好顺序, 但是还会再排一次。

第三,数据类型, 比如说 时间排序, 字符排序,

转载地址:http://arcci.baihongyu.com/

你可能感兴趣的文章
悼念地震死难者:使整个网页变黑白色(灰色)的特效代码
查看>>
asp.net优化完全技巧
查看>>
道 经
查看>>
德 经
查看>>
藏太甲于桐宫-从电视剧康熙王朝中学到的历史知识
查看>>
开发过程中的沟通问题
查看>>
“众”字透出的哲学
查看>>
恋爱爱情婚姻家庭与炒股票
查看>>
答非所问的古今中外名人小笑话幽默
查看>>
周易、命理、风水、姓名与命运交流周易研究心得:姓名学
查看>>
解决asp.net中tabstrip不能点击的问题
查看>>
PB中使用blob进行文件读取的性能问题
查看>>
DataWindow.net中如何实现鼠标划过时变颜色
查看>>
Datawindow.net中设置字符串的显示,超过长度部分显示为。。。
查看>>
PowerBuilder中使用带返回的powerobjectparm
查看>>
从oracle表中随机取记录,产生随机数和随机字符串
查看>>
功夫熊猫,中国式的哲学和西方式的搞笑
查看>>
Oracle SYS口令深入解析
查看>>
XP中IIS“http500”错误的终极解决方法
查看>>
李开复眼中的兰迪教授:引领你的一生
查看>>