快速排序(二)

原创 2006年06月22日 13:49:00

/**
 * 参考:http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/QuickSort3.htm
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2006</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */
public class QuickSort1 {
  public static void swap(int[] number, int i, int j) { //交换number数组索引i,j处的值
    int tmp;
    tmp = number[i];
    number[i] = number[j];
    number[j] = tmp;
  }
  public static void sort(int[] number,int left,int right){
    if(left < right){
      int p  = partition(number,left,right);
      sort(number,left,p-1);
      sort(number,p+1,right);
    }
  }
  public static int partition(int[] number, int left, int right) {
    int i = left - 1;
    int s = number[right];
    int tmp;
    for ( int j = left; j < right ; j++) {
      if (number[j] <= s){
        swap(number, ++i, j);
      }
    }
    swap(number, ++i, right);
    return i;
  }

  public static void print(int[] number) { //打印输入数组内容
    for (int i = 0; i < number.length; i++) {
      System.out.print(number[i] + ",");
    }
    System.out.println("");
  }

  public static void main(String[] args) {
    int[] number = {
        2, 8, 7, 1, 3, 5, 6, 4};
    sort(number, 0, number.length - 1);

    print(number);
  }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法导论二:快速排序

快速排序采用的是分治策略,其方法是将一个数组a[p,r]划分为两个子数组a[p,q-1],a[q+1,r],使其左子数组元素中的元素均小于等于a[q],右子数组元素均大于a[q],并递归划分两个子数组...

快速排序法(二)

在 快速排序法(一) 中,每次将最左边的元素设为轴,而之前曾经说过,快速排序法的加速在于轴的选择,在这个例子中,只将轴设定为中间的元素,依这个元素作基准进行比较,这可以增加快速排序法的效率。 解法 在...

快速排序(二)

快速排序 一、介绍   快速排序和合并排序有点类似,两者可以相互比较。快速排序也是像合并排序那样将整个序列分成两段分别进行排序。但是快速排序没有合并排序的合并过程。      该算法...

java 算法基础之二快速排序算法

所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换...

算法学习(二)快速排序(下)

里是将数组的最后一个元素作为基准数来比较,如图中a[8] = 10。 2)同样的,也有两个指针i 跟 j,但 i 一开始的位置是起始位置 - 1,如上面应该是 0 - 1 = -1。为什么会是这样呢?...

快速排序二

public class ArrayIns { private long[] theArray; private int nElems; public ArrayIns(int ...

快速排序(二)

第二种快速排序,与快排(一)唯一不同的地方是Partition()函数,两者技巧不同,本质都一样都是实现一次快排。 // QuickSort2.cpp : 定义控制台应用程序的入口点。 // ...

Java实现快速排序(二)

快速排序是一种分治法的思想,主要思想是首先找一个“基准”元素,将所有比基准元素大的元素放到基准元素右边,所有比基准元素小的元素放到基准元素左边,这样基准元素在整个序列中的最终位置就确定了,同时,基准元...

算法学习(二)快速排序(上)

1)首先要有两个指针,一个从最前面开始,一个从最后面开始。 2)将数组中第一个元素拿出来,作为一个基准数来比较,比它大的,扔到后面,比它小的扔前面。而由于将它拿出来了,它原先所处的位置就空出来了,如图...

手把手带你认识快速排序(二)——实现

上篇写了下对快速排序的一个简单认识。但是,我个人是比较喜欢代码的,总感觉说的再好,不如看代码爽,下面我就给大家看一下快速排序的代码,我是用的java写的。 public class Quic...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)