算法导论——关于快速排序的实现(c语言实现)

xiaoxiao2021-02-28  54

在算法导论的第七章,介绍了有关快速排序的算法。该算法其实是分治算法的一种。

分:将数组中的元素分成两部分和一个pivot;

治:递归的对两个子数组进行排序;

合:此时将数组遍历输出即可;

书中介绍的算法的主要思想如下:

1、首先将数组的第一个元素作为pivot,然后顺序的遍历该数组,将小于pivot的元素同当前位置的下一个位置的元素交换;

2、该过程直到遍历到数组最后一个元素为止,最终将小于pivot的元素放在其左侧,大于pivot的元素放在其右侧;

3、遍历输出数组。

这是我写的完整的c代码,以及测试结果:

#include<stdio.h> void QuickSort(int *a,int p,int q); int partition(int *a,int p,int q); int main() {     int a[8];     int i;     printf("请输入待排序元素:");     for(i=0;i<8;i++)     {         scanf("%d",&a[i]);     }     QuickSort(a,0,7);     printf("排序后:");     for(i=0;i<8;i++)     {         printf("%d ",a[i]);     }     printf("\n");     return 0; } void QuickSort(int *a,int p,int q) {     int r;     if(p < q)     {         r = partition(a,p,q);         QuickSort(a,p,r-1);         QuickSort(a,r+1,q);     }     return; } int partition(int *a,int p,int q) {     int i,j,t,x;     x = a[p];     i =p;     for(j=p+1;j<=q;j++)     {         if(a[j]<=x)         {             i = i + 1;             t = a[i];             a[i] = a[j];             a[j] = t;         }     }     t = a[i];     a[i] = a[p];     a[p] = t;     return i; }

转载请注明原文地址: https://www.6miu.com/read-56582.html

最新回复(0)