• 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(" ");
    }
    }

    }

    当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
  • 相关阅读:
    SIFT四部曲之——高斯滤波
    Opencv模块功能介绍
    颜色空间那些事儿
    libSVM笔记之(一)在matlab环境下安装配置libSVM
    Debian7安装后的配置(英文环境chromium浏览器中汉字变成方块的问题)
    JAVA的编码转换测试
    Ubuntu普通用户使用串口设备
    RTSP流和USB摄像头转MJPEG使用VLC
    ubuntu 14.04安装右键打开终端功能
    学习的目的和方法论(实战主义)
  • 原文地址:https://www.cnblogs.com/yver/p/5987311.html
Copyright © 2020-2023  润新知