用C语言解释快速排序技术。


排序是将元素按升序(或降序)排列的过程。

排序类型

C语言 提供五种排序技术,如下所示:

快速排序

它是一种分治算法

  • 步骤1 - 从数组中选择一个元素,称为枢轴元素。
  • 步骤2 - 将未排序的数组元素分成两个数组。
  • 步骤3 - 如果值小于枢轴元素的值,则进入第一个子数组;其余大于枢轴元素的值进入第二个子数组。

考虑下面的例子,其中

  • P是枢轴元素。
  • L是左指针。
  • R是右指针。

元素是6, 3, 7, 2, 4, 5。

现在,

  • 枢轴位于固定位置。
  • 所有左侧元素都小于枢轴。
  • 右侧元素都大于枢轴。
  • 现在,将数组分成两个子数组:左部分和右部分。
  • 对左分区应用快速排序。

现在,

  • 枢轴位于固定位置。
  • 所有左侧元素都小于且已排序。
  • 右侧元素都大于且已排序。
  • 最终排序列表是合并两个子数组的结果:2, 3, 4, 5, 6, 7

示例

以下是使用快速排序技术对元素进行排序的C程序:

 在线演示

#include<stdio.h>
void quicksort(int number[25],int first,int last){
   int i, j, pivot, temp;
   if(first<last){
      pivot=first;
      i=first;
      j=last;
      while(i<j){
         while(number[i]<=number[pivot]&&i<last)
         i++;
         while(number[j]>number[pivot])
         j--;
         if(i<j){
            temp=number[i];
            number[i]=number[j];
            number[j]=temp;
         }
      }
      temp=number[pivot];
      number[pivot]=number[j];
      number[j]=temp;
      quicksort(number,first,j-1);
      quicksort(number,j+1,last);
   }
}
int main(){
   int i, count, number[25];
   printf("How many elements are u going to enter?: ");
   scanf("%d",&count);
   printf("Enter %d elements: ", count);
   for(i=0;i<count;i++)
   scanf("%d",&number[i]);
   quicksort(number,0,count-1);
   printf("Order of Sorted elements: ");
   for(i=0;i<count;i++)
   printf(" %d",number[i]);
   return 0;
}

输出

执行上述程序后,会产生以下输出:

How many elements are u going to enter?: 10
Enter 10 elements: 2 3 5 7 1 9 3 8 0 4
Order of Sorted elements: 0 1 2 3 3 4 5 7 8 9

更新于:2023年9月1日

89K+ 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告