zoukankan      html  css  js  c++  java
  • 排序——快速排序

    已知数列{49,38,65,97,76,13,27,49}

    1>快速排序      --> http://blog.csdn.net/jianyuerensheng/article/details/51258374

      快速排序(是冒泡排序的一个升级)就是先找一个基准(一般是将数组第一个值作为基准元素),然后通过第一趟扫描 将数组分为两部分,一部分是小于基准元素的,另一部分是大于基准元素的,最后通过递归实现分而治之,用同样的方法对两部分都进行操作,直到不能再分

    public class sortKuaiTest {
        public static void main(String[] args) {
            int[] arrNum = {49,38,65,97,76,13,27,49};
            //排序方法
            sort(arrNum,0,arrNum.length-1);
            //打印输出结果
            for(int i=0;i<arrNum.length;i++){
                System.out.println(arrNum[i]);
            }
        }
        //排序
        public static void sort(int[] arrNum,int ss,int ee){
            if(ss>=ee){
                return;
            }
         //找中间位置
    int middle = getMiddleNum(arrNum,ss,ee); //递归排序
    sort(arrNum,ss,middle
    -1); sort(arrNum,middle+1,ee); }
      //找中间位置
    public static int getMiddleNum(int[] arrNum,int ss,int ee){ int tempNum = arrNum[ss]; //基准(选取数组第一个为基准数) while(ss<ee){
           //从后往前遍历
    while(ss<ee && arrNum[ee]>=tempNum){ ee--; } arrNum[ss] = arrNum[ee];
           //从前往后遍历
    while(ss<ee && arrNum[ss]<=tempNum){ ss++; } arrNum[ee] = arrNum[ss]; }
         //讲基准数赋值给结束位置 arrNum[ee]
    = tempNum; return ee; } }

    2>冒泡排序

    public class sortKuaiTest {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arrNum = {49,38,65,97,76,13,27,49};
            sortMP(arrNum);
            for(int i=0;i<arrNum.length;i++){
                System.out.println(arrNum[i]);
            }
        }
        public static void sortMP(int[] arrNum){
         //双层for循环遍历数组,逐个对比,如果后者小于前者则交换位置,实现了冒泡
         for(int i=0;i<arrNum.length;i++){ for(int j=i+1;j<arrNum.length;j++){ if(arrNum[i]>arrNum[j]){ int tempNum = arrNum[i]; arrNum[i] = arrNum[j]; arrNum[j] = tempNum; } } } } }

    3>插入排序

      插入排序,就是从第二个值开始,与前面的值进行比较然后进行移位和插入

    public class sortKuaiTest {
        public static void main(String[] args) {
            int[] arrNum = {49,38,65,97,76,13,27,49};
            sortCR(arrNum);
            for(int i=0;i<arrNum.length;i++){
                System.out.println(arrNum[i]);
            }
        }
        //----------------------------插入排序-------------------------------
        public static void sortCR(int[] arrNum){
            int i,j,tempNum;
            for(i=1;i< arrNum.length;i++){ //从数组第二个值开始进行
                tempNum = arrNum[i]; //暂时保存当前循环的值(即:要插入的值)
                j=i-1;
                while(j>=0 && tempNum<arrNum[j]){ //如果有插入的值比较小的,循环后移
                    arrNum[j+1] = arrNum[j];
                    j--;
                }
                arrNum[j+1] = tempNum;
            }
        }
    }

    4>希尔排序

      希尔排序是插入排序的升级,是先设置增量(初始将增量设置为数组的一半,逐渐递减为增量的一半,直到增量为1),然后判断两个值的大小进行交换位置

    public class sortKuaiTest {
        public static void main(String[] args) {
            int[] arrNum = {49,38,65,97,76,13,27,49};
            sortXE(arrNum);
            for(int i=0;i<arrNum.length;i++){
                System.out.println(arrNum[i]);
            }
        }
        //----------------------------希尔排序-------------------------------
        public static void sortXE(int[] arrNum){
            int i,j,tempNum; //i为每次排序的增量
            for(i=arrNum.length/2;i>0;i /= 2){  //增量为上一次的一半(i/2)
                for(j=0;j<arrNum.length-i; j++){
                    if(arrNum[j]>arrNum[j+i]){  //升序或降序在这里可以设置
                        tempNum = arrNum[j];
                        arrNum[j] = arrNum[j+i];
                        arrNum[j+i] = tempNum;
                    }
                }
            }
        }
    }
  • 相关阅读:
    IntelliJ IDEA使用心得之问题篇;
    IntelliJ IDEA使用心得之Maven项目篇
    IntelliJ IDEA使用心得之非Maven项目篇
    IntelliJ IDEA使用心得之插件篇
    IntelliJ IDEA使用心得之快捷键篇
    新博客地址
    【转载】Dijkstra算法和Floyd算法的正确性证明
    【转载】最小生成树之Kruskal算法
    论自动AC机
    【转载】C++ STL priority_queue用法
  • 原文地址:https://www.cnblogs.com/yuxin-555xt/p/6294219.html
Copyright © 2011-2022 走看看