zoukankan      html  css  js  c++  java
  • 排序算法03------------快速排序

    1.之前介绍的冒泡和选择排序都是适用于少量的数据,一旦数据量比较大,效率就很低的,因为他们的时间复杂度是O(n²)。

    2.今天介绍一种算法不是很难,速度很快的排序算法,快速排序。

    一 快速排序

      1)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,

            整个排序过程可以递归执行。

      2)排序过程动图(来自百度百科)

        

      3)步骤:

        (1)设置两个变量 i,j,令i=0,j=n-1

          (2)  选择一个元素作为分割点(key),通常选第一个元素,令key=arrary[0]

          (3) 从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]的值交换

          (4) 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]的值交换

          (5) 重复第3、4步,直到i==j。此时排序完成

    二 代码

      

     1 #include<stdio.h>
     2 void quickSort(int *arr,int left,int right)
     3 {
     4     int i,j,temp;
     5     i=left;
     6     j=right;
     7     if(i==j)//递归结束条件 
     8         return;
     9     temp=arr[left];
    10     while(j>i)
    11     {
    12         while(j>i&&arr[j]>=temp)
    13             j--;
    14         arr[i]=arr[j];
    15         while(i<j&&arr[i]<=temp)
    16             i++;
    17         arr[j]=arr[i];
    18     }
    19     arr[j]=temp;
    20     quickSort(arr,0,i);//递归执行,对左半分进行排序 
    21     quickSort(arr,i+1,right);//递归执行,对右半分进行排序 
    22 }
    23 int main()
    24 {
    25     int i; 
    26     int arr[10]={1,3,-9,0,10,2,8,9,19,-1};
    27     quickSort(arr,0,9);//选择排序
    28     for(i=0;i<10;i++)
    29         printf("%d
    ",arr[i]);
    30     return 0;
    31 } 

      快速排序是冒泡排序的一种改进,的时间复杂度是O(nlog₂n),是线性级。

  • 相关阅读:
    Docker容器部署 Nginx服务
    trap 的用法 /etc/init.d/rcS trap :1 2 3 24
    android system setup and building (2)
    ubuntu 中建立tftp 服务器
    Mount nfs 报错Protocol not supported
    android system setup and building (1)
    mknod 详解
    linux 内核中已经定义的主设备号及查看设备设备号
    fstab 文件详解
    Linux根文件系统的挂载过程分析
  • 原文地址:https://www.cnblogs.com/duichoumian/p/12551865.html
Copyright © 2011-2022 走看看