快速排序C语言实现(递归)和希尔排序

来源:互联网 发布:c语言静态局部变量 编辑:程序博客网 时间:2024/04/29 05:53

快速排序:

#include "stdio.h"void swap(int *a,int *b){                            /*序列中元素位置的交换*/  int tmp;  tmp = *a;  *a = *b;  *b = tmp;}void quicksort(int k[], int s,int t){                            /*快速排序*/    int i,j;    if(s<t){        i = s;        j = t+1;        while(1){            do i++;            while(!(k[s]>=k[i] || i==t));        /*重复执行i++操作*/            do j--;            while(!(k[s]<=k[j] || j==s));        /*重复执行j--操作*/            if(i<j)                swap(&k[i],&k[j]);            /*交换k[i]和k[j]的位置*/            else                break;        }        swap(&k[s],&k[j]);                /*交换基准元素与k[j]的位置*/        quicksort(k,s,j-1);                    /*递归排序基准元素前面的子序列*/        quicksort(k,j+1,t);                    /*递归排序基准元素后面的子序列*/    }}main(){    int k[10]={2,5,6,3,7,8,0,9,12,1} , i;    printf("The orginal data array is\n") ;    for(i=0;i<10;i++)                        /*显示原序列之中的元素*/        printf("%d ",k[i]);    quicksort(k,0,9);                        /*快速排序*/    printf("\nThe result of quick sorting for the array is\n");    for(i=0;i<10;i++)                         /*显示排序后的结果*/        printf("%d ",k[i]);    getche();}

希尔排序:

#include "stdio.h"void shellsort(int k[],int n){    int i, j, flag ,gap = n;    int tmp;    while(gap > 1){    gap = gap/2;                /*增量缩小,每次减半*/    do{                        /*子序列应用冒泡排序*/        flag = 0;        for(i=1;i<=n-gap;i++){            j = i + gap;            if(k[i]<k[j]){                tmp = k[i];                k[i] = k[j];                k[j] = tmp;                flag = 1;                }            }         }while(flag !=0);    }}main(){    int i,a[11] = {-111,2,5,6,3,7,8,0,9,12,1};            /*初始化序列,a[0]可任意置数*/    printf("The orginal data array is\n") ;    for(i=1;i<=10;i++)                            /*显示原序列之中的元素*/        printf("%d ",a[i]);    shellsort(a,10);                                /*执行希尔排序*/    printf("\nThe result of Shell's sorting for the array is\n");    for(i=1;i<=10;i++)        printf("%d ",a[i]);                            /*输出排序后的结果*/    getche();}


2 2
原创粉丝点击