C语言编程实现一个数组的全排列,1、定义一个数组,编程打印它的全排列。(应用递归)2.删除文件函数...

c语言中排序的实现方法有好几种.可以到百渡上去搜,会有不少答案的.给你提供几个.希望对你有帮助.

这是冒泡法的程序:

#include

void sort(int array[],int size)

{

int i,j,temp;

/*下面是利用相邻的比较,把大的数放到上面;*/

for(i=0;i

for(j=i+1;j

if(array[i]>array[j])

{

temp=array[i];

array[i]=array[j];

array[j]=temp;

}

}

void main()

{

int i;

int a[10]={1,33,78,34,787,213,132,35,32,21};

sort(a,10);

for(i=0;i<10;i++)

printf("%6d",a[i]);

}

这是选择法的程序:

#include

void sort(int array[],int size)

{

int i,j,k,temp;

for(i=0;i

{

k=i;

/*把最小的那一个数找出来,并且用a[k]记下来,然后与a[i]交换;*/

for(j=i+1;j

if(array[k]>array[j])

k=j;

temp=array[k];

array[k]=array[i];

array[i]=temp;

}

}

void main()

{

int a[]={12,43,54,23,32,65,87,2,34,54};

int i;

sort(a,10);

for(i=0;i<10;i++)

printf("%d ",a[i]);

}

这是一个快速排序的程序:

#include

void quick_sort(int array[],int first,int last)//first,last分别为数组下标的范围;

{

int temp,low,high,list_separator;

low=first;

high=last;

/*下面是比较数组中的大小,把数组中的数与中间数比较,大的放在后半部分,比中间数小的放在前半部分,*/

list_separator=array[(first+last)/2];//中间数;

do{

while(array[low]

low++;

while(array[high]>list_separator)// 中间数与后半部分比较;

high--;

if(low<=high)//前半部分与后半部分交换;

{

temp=array[low];

array[low++]=array[high];

array[high--]=temp;

}

}while(low<=high);

if(first

quick_sort(array,first,high);//利用递归的办法,实行循环;

if(low

quick_sort(array,low,last);//利用递归的办法,实行循环;

}

void main()

{

int a[9]={12,23,34,65,93,32,21,9,8};

quick_sort(a,0,8);

for(int i=0;i<9;i++)

printf("%d ",a[i]);

printf(" ");

}

这是一个希尔排序的程序:

#include

void shell_sort(int array[],int size)

{

int temp,gap,i,flag;

gap=size/2;

do{

do{

flag=0;/*利用标记,使前半部分与后半部分的数都对应比较过,前半部分大于后半部分的交换,直到都比较过,并且前半部分的数小于与前部分一一对应的后部分的数时,退出while循环*/

for(i=0;i

if(array[i]>array[i+gap])

{

temp=array[i];

array[i]=array[i+gap];

array[i+gap]=temp;

flag=1;

}

}while(flag);

}while(gap=gap/2);

}

void main()

{

int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i;

shell_sort(array,15);

for(i=0;i<15;i++)

printf("%10d",array[i]);

}

6f83fddf9cb9ff6843fffd45e1807199.gif

欢迎来到我的博客:http://blog..cn/noisunyuhong

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值