快速排序

来源:互联网 发布:mysql索引失效 in or 编辑:程序博客网 时间:2024/04/27 16:41
public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        int[] a = {12, 20, 5, 16, 15, 1, 30, 45, 23, 9};        int start = 0;        int end = a.length - 1;        sort(a, start, end);        for (int i = 0; i < a.length; i++) {            Log.e("arr:", "" + a[i]);        }    }    /**     * 算法规则: 本质来说,快速排序的过程就是不断地将无序元素集递归分割,一直到所有的分区只包含一个元素为止。     * 由于快速排序是一种分治算法,我们可以用分治思想将快排分为三个步骤:     * 1.分:设定一个分割值,并根据它将数据分为两部分     * 2.治:分别在两部分用递归的方式,继续使用快速排序法     * 3.合:对分割的部分排序直到完成     *     * @return     */    public void sort(int arr[], int star, int end) {        //记录开始的位置        int s = star;        //记录最后的位置        int e = end;        //找到基准数,一般都是第一个        int key = arr[star];        //根据循环判断这个数组,是否大于一个元素。        while (end > star) {            //从右向左找,比他小的数            while (end > star && arr[end] >= key)                end--;            //如果这个数比基准数小,就交换位置            if (arr[end] <= key) {                int tenmp = arr[star];                arr[star] = arr[end];                arr[end] = tenmp;            }             //从左向右找,找到比他大的数            while (end > star && arr[star] < key)                star++;                //然后进行替换            if (arr[star] > key) {                int tenmp = arr[star];                arr[star] = arr[end];                arr[end] = tenmp;            }        }        //判断刚开始的位置改变了没有,如果改变了就是在进行排序        if (s < star) sort(arr, s, star - 1);        //判断结束的位置是否改变,因为是从右向左走的下标肯定是变小        if (e > end) sort(arr, end + 1, e);    }}
原创粉丝点击