zoukankan      html  css  js  c++  java
  • 实习之路--点滴积累一_快排

    邻近毕业,得总结一下自己学过的东西了,自己也不知道自己会什么,那就先从数据结构开始吧。

    首先写个快速排序。

    原理比较简单:

    (1)在数组中随便找一个值a

    (2)根据a进行分类,比a小的放a的左边,比a大的放a的右边

    (3)递归,循环

    需要注意的是:

    (1)比如,int Quick_sort(int *p, int left, int right); 其中的 low 和 high 的值容易弄错。

       举个例子,数组中有10个数,则 left = 1, right = 10;而不是  left = 0, right = 9;

    (2)建立在(1)的基础上,递归的时候调用的是

      quick_sort(p, left, i);          // 是 i , 而不是 i - 1
      quick_sort(p, i + 2, right); // 是 i + 2 , 而不是 i + 1

    (3)此处的参数类型是 long 型, 可用于扩展,分析快排的性能,如下:

      long s[100000];
      for (long i = 0; i<100000; i++) s[i] = rand();  //产生随机数
      quick_sort(s, 1, 100000);
      cout << "running time:" << clock() << endl;  //输出排序执行的时间,得添加头文件 #include<ctime>

     1 void quick_sort(long *p, long left, long right)
     2 {
     3     
     4     if (left < right)
     5     {
     6         long i = left - 1, j = right - 1, temp = p[i];
     7         while (i < j)
     8         {
     9             while (i < j && p[j] > temp) j--;
    10             if (i < j)
    11             {
    12                 p[i++] = p[j];
    13             }
    14             while (i < j && p[i] < temp) i++;
    15             if (i < j)
    16             {
    17                 p[j--] = p[i];
    18             }
    19         }
    20         p[i] = temp;
    21         quick_sort(p, left, i);
    22         quick_sort(p, i + 2, right);
    23     }
    24 }

    然后可以在主函数中测试一下,如:

    1 int main()
    2 {
    3     long s[] = { 5, 7, 8, 9, 1, 2, 3, 4, 10, 6 };
    4     quick_sort(s, 1, 10);
    5     for (int i = 0; i < 10; i++) cout << s[i] << ends << ends;
    6     return 0;
    7 }

    输出结果是:

  • 相关阅读:
    python冲刺(5)列表声称式
    python冲刺(4)切片 等
    python冲刺(3)函数 等
    python冲刺(2)
    python冲刺(1)
    redis初步(1)
    php连接Oracle的时候遇到的编码集问题
    redis初步
    php 命名空间
    指向字符数组的指针与指向整型数组的指针
  • 原文地址:https://www.cnblogs.com/casparzheng/p/4370155.html
Copyright © 2011-2022 走看看