zoukankan      html  css  js  c++  java
  • 快速排序算法-C语言实现

    注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序。同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现。按照功能进行模块划分的思想得到了彻底地贯彻。

    以下内容翻译自:

     

    1. http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx

     

    译文:

    在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。

     

    步骤如下:

     

    在序列中选择一个关键元素做为轴;

     

    对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;

     

    递归地对两个子序列进行重新排序:含有较小元素的子序列和含有较大元素的子序列。

     

    下面的动画展示了快速排序算法的工作原理。

     

    快速排序图示:可以图中在每次的比较选取的key元素为序列最后的元素。

    #include <stdio.h>
    #include <stdlib.h> 
    
    void swap(int *x,int *y)
    {
       int temp;
       temp = *x;
       *x = *y;
       *y = temp;
    }
    
    int choose_pivot(int i,int j )
    {
       return((i+j) /2);
    }
    
    void quicksort(int list[],int m,int n)
    {
       int key,i,j,k;
       if( m < n)
       {
          k = choose_pivot(m,n);
          swap(&list[m],&list[k]);
          key = list[m];
          i = m+1;
          j = n;
          while(i <= j)
          {
             while((i <= n) && (list[i] <= key))
                    i++;
             while((j >= m) && (list[j] > key))
                    j--;
             if( i < j)
                    swap(&list[i],&list[j]);
          }
         // 交换两个元素的位置
          swap(&list[m],&list[j]);
         // 递归地对较小的数据序列进行排序
          quicksort(list,m,j-1);
          quicksort(list,j+1,n);
       }
    }
    
    void printlist(int list[],int n)
    {
       int i;
       for(i=0;i<n;i++)
          printf("%d	",list[i]);
    }
    
    void main()
    {
       const int MAX_ELEMENTS = 10;
       int list[MAX_ELEMENTS];
    
       int i = 0;
       
       // 产生填充序列的随机数
       for(i = 0; i < MAX_ELEMENTS; i++ ){
         list[i] = rand();
       }
       printf("进行排序之前的序列:
    ");
       printlist(list,MAX_ELEMENTS);
       
       // sort the list using quicksort
       quicksort(list,0,MAX_ELEMENTS-1);
    
       // print the result
       printf("使用快速排序算法进行排序之后的序列:
    ");
       printlist(list,MAX_ELEMENTS);
    }
  • 相关阅读:
    第十二周作业
    2019春总结作业
    第一次实验总结
    第二次实验总结
    第十二周
    第十一周作业
    第九周作业
    第八周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3823050.html
Copyright © 2011-2022 走看看