快速排序——面试经典算法题

快速排序——面试经典算法题_第1张图片

1. 写一个快速排序的方法

方法里形参分别为需要进行排序的数组、数组起始位置、数组结束位置。

static void fastsort(int[] arr,int start,int end)

1.1 先进行判断最左端和最右端是否满足条件

    if (start>end) {
        return;
    }`

1.2 定义变量来接收参数值

	int base = arr[start];
	int i = start;
    int j = end;

1.3 两边开始进行比较大小(右边先开始走)

先从右往左走,检测到比基准数小的数就停下,且左边值仍然小于右边的值

            while (i < j && arr[j] >=base) {
                j--;
            }

再从左往右走,检测到比基准数大的数就停下,且左边值仍然小于右边的值
当两个循环都停止时

while (i < j && arr[i] <= base) {
                i++;
            }

交换满足两个条件的值

		int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;

1.4 当一个循环结束

把i和j相遇位置的值与基准值进行交换

        arr[start]=arr[i];
        arr[i]=base;

1.5 递归对运行完的进行递归排序

		fastsort(arr,start,i-1);     
        fastsort(arr,j+1,end);

2. 在主方法调用快速排序方法

public static void main(String[] args) {
    int[]arr = {3,7,9,5,2,14,16,13,1,10};
    fastsort(arr,0,arr.length-1);
        for (int a:arr) {
            System.out.print(a+" ");
        }
    }

运行结果如下:

在这里插入图片描述

源代码

package com.suanfa.domin;

public class FastSort {
    public static void main(String[] args) {
    int[]arr = {3,7,9,5,2,14,16,13,1,10};
    fastsort(arr,0,arr.length-1);
        for (int a:arr) {
            System.out.print(a+" ");
        }
    }

    static void fastsort(int[] arr,int start,int end){

        //先判断start和end是不是成立,如果不成立则结束循环
        if (start>end) {
            return;
        }

        int base = arr[start];
        int i = start;
        int j = end;


        while(i!=j) {
            // 1.先从右往左进行检索,找到满足条件值则停下跳出循环
            while (i < j && arr[j] >=base) {
                j--;
            }

            // 2.再从左侧向右侧进行检索,找到满足条件值则停下跳出循环
            while (i < j && arr[i] <= base) {
                i++;
            }

            // 3.交换满足条件的两个位置的值
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        // 4.交换i和j相遇位置的值和base
        arr[start]=arr[i];
        arr[i]=base;

        // 5.递归进行排序
            // 5.1左边进行排序
        fastsort(arr,start,i-1);
            // 5.1左边进行排序
        fastsort(arr,j+1,end);
        }
    }



你可能感兴趣的:(常用基本算法,算法,快速排序,数据结构,互联网面试)