快速排序算法-C语言实现

来源:互联网 发布:直播间软件 编辑:程序博客网 时间:2024/05/21 07:40

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

以下内容翻译自:

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\t",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("进行排序之前的序列:\n");   printlist(list,MAX_ELEMENTS);   // sort the list using quicksort   quicksort(list,0,MAX_ELEMENTS-1);   // print the result   printf("使用快速排序算法进行排序之后的序列:\n");   printlist(list,MAX_ELEMENTS);}
0 0
原创粉丝点击