快速排序(完整程序c语言实现)

来源:互联网 发布:淘宝抢火车票靠谱吗 编辑:程序博客网 时间:2024/06/05 19:58

键码序列(66,13,51,76,81,26,57,69,23)进行快速排序。
求第一趟划分后的结果。
关键码序列递增。
以第一个元素为划分基准。
【主要方法步骤】如下:
将两个指针i,j分别指向表的起始和最后的位置。
反复操作以下两步:
(1)j逐渐减小,并逐次比较j指向的元素和目标元素的大小,若p(j)

#include<stdio.h>#include<stdlib.h>void Q_sort(int a[],int num);void swap(int *a,int *b);static int m = 0,n = 0;int main(){    int k = 0;    int a[9] = {3,6,5,9,7,1,8,2,4};    Q_sort(a,9);    for(k = 0;k<9;k++)    {        printf("%d ",a[k]);    }    printf("\n比较次数为: %d\n交换次数为: %d\n",m,n);    return 0;}void Q_sort(int a[],int num){    int key;    int i = 0;    int j = num - 1;    key = a[0];    if(num > 1)    {        while(i!=j)        {            for(;i<j;j--)            {                m++;                if(a[j]<key)                {                    a[i] = a[j];                    //swap(&a[i],&a[j]);                    n++;                    break;                }            }            for(;i<j;i++)            {                m++;                if(a[i]>key)                {                    a[j] = a[i];                    //swap(&a[i],&a[j]);                    n++;                    break;                }            }          a[i] = key;        }        Q_sort(a,i);        Q_sort(a+i+1,num-i-1);    }}void swap(int *a,int *b){    int temp;    temp = *a;    *a = *b;    *b = temp;}
0 0
原创粉丝点击