Java八大排序---快速排序

快速排序:
快速排序是对冒泡排序的一种改进。
基本思想:
通过一趟排序将要排序的数据分割成独立的俩部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这俩部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

动态图解:
在这里插入图片描述
Java代码实现:

import java.util.Scanner;

public class Quick_sort {
public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.println("请输入数组的大小:");
	Scanner input = new Scanner(System.in);
	int a = input.nextInt();
	int [] arr = new int[a];
	for(int i = 0;i<arr.length;i++) {
		System.out.println("请输入数组的第"+i+"个值:");
		int s = input.nextInt();
		arr[i] = s;
	}
	arr = QuickSort(arr);
	for(int i = 0;i<arr.length;i++)
	System.out.print(" "+arr[i]+" ");
}
public static int[] QuickSort(int[] arr) {
	//快速排序:
	//分治法!
	//基本思想:选择第一个数为k,小于k的数放在左边,大于k的数放在右边。
	//递归的将小于基准值的元素和大于基准值的元素进行排序。直到不能递归。
	
	//查找中轴、递归排序
	if(arr.length>0)
		Quick(arr,0,arr.length-1);
	//直到分组后的数组大小为1
	return arr;
}

//对数组进行分组,并调用排序算法,对分好的组分别进行排序
public static void Quick(int[] arr,int start,int end) {
	if(start < end)
    {
		//将numbers数组进行一分为二
		int middle = Middle(arr,start,end); 
		//对低字段表进行递归排序
		Quick(arr, start, middle-1);   
		//对高字段表进行递归排序
		Quick(arr, middle+1, end); 
    }
}

//将传递进来的数组进行排序,
public static int Middle(int[] arr,int start,int end) {
	//查找出中轴(默认是最低位low)的在arr数组排序后所在位置 
    //arr	      待查找数组
    //start   开始位置
    //end     结束位置
    //mid     中轴所在位置
	
	//数组的第一个作为中轴
    int temp = arr[start]; 
    //判断数组是否合法
    while(start < end)
    {
     //从后往前遍历数组,如果数值大于作为中轴的数值,则往前继续查找,直到找到第一个小于中轴的数或者start>end
     while(start < end && arr[end] > temp)
      {
         end--;
      }
     //比中轴小的记录移到低端
     arr[start] = arr[end];
     //从前往后遍历数组,如果数值小于作为中轴的数值,则继续往后查找,直到找到第一个大于中轴的数或者start>end
     while(start < end && arr[start] < temp)
     {
         start++;
     }
     //比中轴大的记录移到高端
     arr[end] = arr[start] ;
        }
    //中轴的数值给最后空出的位置
    arr[end] = temp ; 
    //将中轴的位置的下标返回,左边的数是小于中轴的,右边的数是大于中轴的。对左右俩遍进行递归排序
	return start;
	}
}
发布了40 篇原创文章 · 获赞 2 · 访问量 3400

猜你喜欢

转载自blog.csdn.net/BEYONDmonster/article/details/100849528