zoukankan      html  css  js  c++  java
  • 快速排序算法分析

         本篇博客是我第一篇在博客园上的博客,接下来我也会陆续传上我的java学习历程。第一篇博客可能会写的很low 。大家多多关照^_^

    本次主要来介绍一下快速排序的算法原理,以及快速排序的代码分析。

    快速排序的原理:

          它是由冒泡排序改进而得,它是在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,通过从两头向中间扫描的方式,将基准数放入适当的位置将其分成两个区域,使得它的前一部分都比它小,后一部分都比它大。然后通过递归的方式,比较所有的区域。

    快速排序的方法:

          首先找到第一个数将其作为基准,然后从右往左寻找比基准数的小的数(将其位置定义为i)然后停止寻找(这里必须先从右往左寻找,否则你最后找的数将会大于基准数,交换的时候会导致这个大于它的数在它左边),然后从左往右寻找基准数大的数(将其位置定义为j,i<j).然后将其交换,直到i=j时停止,然后将相等的这个位置与基准数交换,文字可能比较难懂,直接上图分析。    

             下面附上快速排序算法:

    public class Quicklysort {
                  void sort(int a[], int left, int right) {

                         //直到所有左边的数都小于右边的数退出递归
                           if (left <right){
                        int  temp = a[left]; // 通过设置一个变量来存储基准值
                        int i = left; //不要去改变表参数变量,将它赋值给一个变量
                        int j = right;
                        while ( i != j) {
                             // 顺序很重要,要先从右边开始找
                                   while (a[j] >= temp && i < j)
                                              j--;
                             // 再找左边的
                                  while (a[i] <= temp && i < j)
                                             i++;
                         // 交换两个数在数组中的位置
                            int t = a[i];
                            a[i] = a[j];
                           a[j] = t;
                     }
                        //将基准数归位
                          a[left] = a[i];
                          a[i] = temp;


                      sort(a, left, i - 1);// 继续处理左边的,这里是一个递归的过程。
                     sort(a, i + 1, right);// 继续处理右边的 ,这里是一个递归的过程。

                   }
            }
    }

     

                 public class QuicklysortMain {
                          public static void main(String []args){
                           Quicklysort s=new Quicklysort();
                           int[] a = {5,7,2,6,0,9,4,8,3};//定义一个数组存放需要排序的数据
                           int start = 0;
                           int end = a.length-1;
                           s. sort(a,start,end);
                         System.out.println(Arrays.toString(a));
                 }
    }

          ok,到这我已经结束我的第一次分享。请期待我的下一次分享哦,我会努力把以后的写的更好的。^_^  

     

  • 相关阅读:
    如何写一个计算器?
    Web-Scale IT 我之见!
    Django 安全策略的 7 条总结!
    运维安全系列基础服务之 FTP 服务(系列一)
    程序复杂度之圈复杂度
    微信小程序的wx-charts插件-tab选项卡
    微信小程序的wx-charts插件-tab选项卡
    小程序请假效果
    HTTP状态码
    解决微信小程序使用wxcharts在屏幕不固定问题-开发工具里也显示好了布局,为啥到真机就是乱的
  • 原文地址:https://www.cnblogs.com/hzlsss/p/9049729.html
Copyright © 2011-2022 走看看