快排

快  排

在学习前,首先要端正态度。在此我首先宣扬一下社会主义的核心价值观:富强、民主、文明、和谐,自由,平等、公正、法治,爱国、敬业、诚信、友善。

快排是对冒泡排序的一种改进。

例:

假设有一个int数组 A {6,0,7,9,2,5,1,8,3,4} 

i从左侧开始指针,j是从右侧开始的指针

我们以index=A[0]=6 来做一个分界线 每次都与数组的第一个作对比

首先从j=9开始往左 直到i>=j时候或者找到一个比6小的数 这里A[9]=4  所以A[9]<6 我们就把A[9]和A[0]互换位置,这时候因为A[0]已经做过对比了 所以i往后移动 i++;

数组变成{4,0,7,9,2,5,1,8,3,6} 

这时候到从i那里开始往又找 直到i>=j时候或者找到一个比6大的数,如果找到比6大的数 就和A[j](此时的A[j]=6)交换位置 因为A[j]已经和6做了对比 所以 j往前面移动 j--;

数组变成{4,0,6,9,2,5,1,8,3,7} 

重复以上两部操作 直到i>=j; 

这是数组为{4,0,3,1,2,5,6,8,9,7}  此时6的左边全部比6小 6的右边全部比6大

这时指针i 和 j都等于6

这里的代码如下

 1 int l = low;
 2         int h = high;
 3        // int index = num[l];
 4         while (l<h){
 5             //从右边开始比较
 6             while(l<h&&num[h]>num[l]) h--;
 7             if(l<h){
 8             //交换位置
 9                 num[h] = num[h]+num[l];
10                 num[l]=num[h]-num[l];
11                 num[h]=num[h]-num[l];
12                 l++;
13             }
14 
15             //从左边开始比较
16             while (l<h&&num[l]<num[h]) l++;
17             if (l<h){
18                 //交换位置
19                 num[l] += num[h];
20                 num[h] =num[l]-num[h];
21                 num[l] =num[l]-num[h];
22                 h--;
23             }

 

 

此时数组分为两组{4,0,3,1,2,5},{8,9,7} 对这两组进行与上述的操作 知道最后开始i<=0 ; j>=数组长度-1;

整体代码如下

 1 package org.demo;
 2 
 3 public class Quick {
 4 
 5     public void sort(int num[],int low,int high){
 6         int l = low;
 7         int h = high;
 8        // int index = num[l];
 9         while (l<h){
10             //从右边开始比较
11             while(l<h&&num[h]>num[l]) h--;
12             if(l<h){
13             //交换位置
14                 num[h] = num[h]+num[l];
15                 num[l]=num[h]-num[l];
16                 num[h]=num[h]-num[l];
17                 l++;
18             }
19 
20             //从左边开始比较
21             while (l<h&&num[l]<num[h]) l++;
22             if (l<h){
23                 //交换位置
24                 num[l] += num[h];
25                 num[h] =num[l]-num[h];
26                 num[l] =num[l]-num[h];
27                 h--;
28             }
29 
30         }
31         String s="";
32         for(int n:num) {
33             s=s+n+" ";
34         }
35         System.out.println(s);
36 
37         if (l>low) sort(num,low,h-1);    //l和h都行
38         if (h<high) sort(num,h+1,high);  //l和h都行
39     }
40 
41     public static void main(String[] args) {
42         int num[]={6,0,7,9,2,5,1,8,3,4};
43         Quick quick = new Quick();
44         quick.sort(num,0,num.length-1);
45         String s="";
46        for(int n:num) {
47            s=s+n+" ";
48        }
49        System.out.println(s);
50     }
51 }

 

posted @ 2018-08-21 21:21  胡叔叔  阅读(236)  评论(0编辑  收藏  举报