zoukankan      html  css  js  c++  java
  • 快速算法的两个实现方法

    今天调试了快速算法的代码,当然网上这样的代码一大堆,只是这个是自己一点点写的,中间易错点都出现并调试出来。留着以后自己复习用了。

    交换代码:

    void sw(int *a,int *b)//交换数据
    {
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
    }

    实现方法1:

    ////由大到小排序

    void sort(int a[],int low,int high)
    {

    int key=a[low];
    int first=low;
    int last=high;
    if (first >last)
    {
    return;
    }
    while(first<=last)
    {
    while(a[first]>key/*&&first<last*/)
    first++;
    while(a[last]<key/*&&first<last*/)
    last--;
    if (first <=last)
    {
    if (first != last)
    sw(&a[first],&a[last]);
    first++;
    last--;
    }

    }
    //first and last 都是变化了的。实际上我们应该使用传入数组的第一个和最后一个作为递归的变量
    if (last>1)
    sort(a,low,last);
    if(first<high)
    sort(a,first,high);

    }

    第二种方法:

    //此算法不是很好理解,特别是它的交换操作.

    void Qsort(int a[],int low,int high)
    {
    /////由小到大排序
      if(low>=high)
      {
        return;
      }
      int first = low;
      int last = high;
      int key = a[low];
      while (first <last)
      {
        while (first<last && a[last]>=key)
          last--;
        a[first] = a[last];
        while (first<last &&a[first]<= key)
          first++;
        a[last] = a[first];
      }

    //////重新将key值赋给first,现在first的位置就是个分界线,他站在了自己应属的位置,不用动了

    ////first将数组分成两个  第一个是low  到 first-1,第二个是first+1 到high  。

    ///注意,此算法和上面的算法区别是本算法是用low和high保存数组的第一个和最后一个元素的下标。

    ///但本质是一样的。first保存了数组分割位置
      a[first] = key;

      Qsort(a,low,first-1);
      Qsort(a,first+1,high);

    }

    博客内容只为本人学习所感转载亦或自写,不足或错误之处请大家不吝赐教
  • 相关阅读:
    php把数组保存入php文件中
    js判断js文件有没有引入,一般引入的js文件里面都会有函数和对象是否存在
    js 控制按钮点击后不可用
    关于jquery.fn
    js判断回车,区分IE,火狐,谷歌
    复选框 全选 全不选 反选
    50个必备的实用jQuery代码段
    jQuery.extend 函数详解
    VIM查找替换归纳总结
    mysql优化之query_cache_limit
  • 原文地址:https://www.cnblogs.com/niupan369/p/4054571.html
Copyright © 2011-2022 走看看