zoukankan      html  css  js  c++  java
  • java中快速排序的理解以及实例

    所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值都会跑到这个key的后面,不是的话就可能你写错了,小于这个key的就会跑到这个值的前面;然后我们对这个分段的数组再时行递归调用就可以完成整个数组的排序。

    用图形法表示由下:

    这样就以key分为了两个段,我们把这两个段再递进去就可以解决问题了

    代码如下:

    package test;

    public class TestQuickSort {

    public static void main(String[] args)
    {
    // TODO 自动生成方法存根
    quicksort qs = new quicksort();
    int data[] = {44,22,2,32,54,22,88,77,99,11};
    qs.data = data;
    qs.sort(0, qs.data.length-1);
    qs.display();
    }

    }


    class quicksort
    {
    public int data[];

    private int partition(int sortArray[],int low,int hight)
    {
    int key = sortArray[low];

    while(low<hight)
    {
    while(low<hight && sortArray[hight]>=key)
    hight--;
    sortArray[low] = sortArray[hight];

    while(low<hight && sortArray[low]<=key)
    low++;
    sortArray[hight] = sortArray[low];
    }
    sortArray[low] = key;
    return low;
    }

    public void sort(int low,int hight)
    {
    if(low<hight)
    {
    int result = partition(data,low,hight);
    sort(low,result-1);
    sort(result+1,hight);
    }

    }

    public void display()
    {
    for(int i=0;i<data.length;i++)
    {
    System.out.print(data[i]);
    System.out.print(" ");
    }
    }

    }

    当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
  • 相关阅读:
    八月最后的一天
    Go语言系列一
    一个工具libre draw
    Linux启动eclipse报错找不到java环境解决方法
    P2P通讯初步实现
    C#中,当鼠标移动到控件上,动态显示提示内容 ToolTip
    在windows64位的系统上面操作操作excel程序出现异常
    office2007下载地址
    蜗牛算法
    利用vs自带工具分析程序性能
  • 原文地址:https://www.cnblogs.com/yver/p/5987311.html
Copyright © 2011-2022 走看看