java快速排序算法简析

快速排序算法是什么?

     快速排序算法相当于冒泡排序的升级版;简单的说,先找一个基准数,通过排序将数据分为两部分,基准数一边的数据比另一边的数据都要小,然后按照该方法,将两部分数据分别进行快速排序,整个过程递归进行,最后该数据完成排序,形成有序序列。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我是快乐的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~

快速排序算法怎么用?

      我们用一个例子来说明,假设我们对“2 1 6 7 9 3 4 5 10 8”进行快速排序。我们以2作为基准数(一个用来参照的数) 我们要实现比基准数大的数字位于它的右边,小的位于基准数的左边,类似下面的排序:

 3 1 6 5 4 2 9 7 10 8   --红色代表基准数

     方法确实很简单,分别从初始序列两端开始,先从右往左找一个小于基准数的数,再从左往右找一个大于基准数的数。方法里面可以用两个变量i和j来表示序列的最左边和最右边,一开始i在0的位置,值为6;j在9的位置,值为8;

 下标:    0 1  2  3  4  5  6  7  8  9

 数据:    2  1  6  7  9  3  4  5  10  8  --红色代表基准数,蓝色代表移动的数

     i                     j

     首先j先出动,j向左一个一个的找(j--),找到小于6的数停下来,i向右一个一个的找(i++),找到大于6的数停下来,然后交换,如下:

 下标:    0 1  2  3  4  5  6  7  8  9

 数据:    2  1  6  5  9  3  4  7  10 8 

      继续执行,直到i和j相遇,相遇后将“相遇“的数据与基准数交换,如下:

 下标:    0 1  2  3  4  5  6  7  8  9

 数据:    3  1  6  5  4  2  9  7  10  8 

        这样第一轮排序结束,但是我们可以看到,排序还不太完善,所有我们要继续排序,排序方法和上面一样,选取基准数,我就不列举了。

接下来就是java代码实现:

static void quickSort(int[] a, int left, int right) {  
        if (a == null || a.length <= 1) {  
            return;  
        }  
        if (left < right) {  
            int i = left, j = right;  
            int m = a[left];// 选择第一个元素作为基准值
              
            /** 
             * 分制 
             */  
            while (i < j) {  
                while (i < j && a[j] >= m) {  
                    j--;  
                }  
                //交换位置
                if (i < j) {  
                    a[i] = a[j];  
                    i++;  
                }  
  
                while (i < j && a[i] < m) {  
                    i++;  
                }  
                if (i < j) {  
                    a[j] = a[i];  
                    j--;  
                }  
            }  
          //最终将基准数归位
            a[i] = m;  
              
            /** 
             * 递归 
             */  
            quickSort(a, left, i - 1);  //继续处理左边的,这里是一个递归的过程
            quickSort(a, i + 1, right);  //继续处理右边的,这里是一个递归的过程
        }  
    }  
	//循环排序
	public static void quick(int[] a) {
		quickSort(a, 0, a.length-1);
		for(int i:a) {
			System.out.print(i+" ");
		}
	}

	public static void main(String[] args) {
		int[] a = { 2, 1, 6, 7, 9, 3, 4, 5,10,8 };
		quick(a);
	}

结果为:


快速排序算法有什么用?

首先它是一种排序算法,排序算法是为了让无序的数据组合变成有序的数据组合其次快速排序算法比一般算法更加快速。这里的一般排序是指:起泡,希尔,插入等常规排序方法。




猜你喜欢

转载自blog.csdn.net/qq_42245219/article/details/80468330