您的位置:首页 > 其它

快速排序

2017-08-16 21:36 92 查看
递归思想:

1.将数组划分成两个子数组

2.两个子数组递归调用快排函数继续向下划分两个子数组。。。。

划分子数组的原则:

选取一个基准值A(一般选数组的第一个或最后一个元素),比A小的放左边,比A大的放右边。



1

//1.划分数组方法


2

//arr:数组,start:数组起始索引,end:数组结束索引


3

//base:基准值(默认为数组第一一个值)


4

public void partition(int[] arr,int start,int end){


5

   if (start < end) {


6

       int base = arr[start];//获取基准值


7

   int i = start;//左指针


8

int j = end + 1;//右指针


9

while (true) {


10

while (i < end && data[++i] <= base);//左指针往右不断地移,遇到比base大的就跳出循环


11

while (j > start && data[--j] >= base);//右指针往左不断地移,遇到比base小的就跳出循环


12

if (i < j) {


13

swap(arr, i, j);//跳出循环后还没结束,交换左右指针的值


14

} else {


15

break;//结束了,直接跳出大循环


16

}


17

}


18

swap(arr, start, j);//交换基准值(start索引)和j指针的元素位置(此时j所指的数变成类比base小)


19

partition(arr, start, j - 1);//base值左边进行递归划分数组


20

partition(arr, j + 1, end);//base值右边进行递归划分数组


21

}


22

}


23



24



25

//2.排序方法


26

public void quickSort(int[] arr){


27

   partition(arr,0,arr.length-1);


28

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: