快速排序算法分析

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

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

快速排序的原理:

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

快速排序的方法:

      首先找到第一个数将其作为基准,然后从右往左寻找比基准数的小的数(将其位置定义为i)然后停止寻找(这里必须先从右往左寻找,否则你最后找的数将会大于基准数,交换的时候会导致这个大于它的数在它左边),然后从左往右寻找基准数大的数(将其位置定义为j,j>i).然后将其交换,直到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,到这我已经结束我的第一次分享。请期待我的下一次分享哦,我会努力把以后的写的更好的。^_^  

 

猜你喜欢

转载自www.cnblogs.com/hzlsss/p/9049729.html