| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1160 人关注过本帖
标题:[求助]一个函数怎么样包括六种排序
只看楼主 加入收藏
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
 问题点数:0 回复次数:13 
[求助]一个函数怎么样包括六种排序
用以下六种排序,组成一个函数,用数据结构C语言版来写:
冒泡排序,直接插入排序,直接选择排序,希尔排序,快速排序,堆排序
程序参考如下:
搜索更多相关主题的帖子: 函数 
2006-06-04 19:34
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

直接插入排序

include<stdio.h>

void InsertSort(int *list,int index)
{
int i,j,k;
for(i=2;i<=index;++i)
{
if(list[i]<list[i-1])
{
list[0]=list[i];
list[i]=list[i-1];
for(j=i-2;list[0]<list[j];--j)
list[j+1]=list[j];
list[j+1]=list[0];
}
printf("\nThe current sorting result:\n");
for(k=1; k<=index; k++)
printf("%d ",list[k]);
}
}

void main()
{
int list[20];
int node;
int i,index;

printf("\nPlease input the values you want to sort(exit for 0):\n");
index=0;
scanf("%d",&node);
while(node!=0)
{
list[index+1]=node;
index++;
scanf("%d",&node);
}

InsertSort(list,index);

printf("\n The Final sorting result:");
for(i=1;i<=index;i++)
printf("%d ",list[i]);
}


2006-06-04 19:35
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

希尔排序


#include<stdio.h>
/*希尔排序法*/
void ShellSort(int *list,int index)
{
int i,j;
int length;
length=index/2;

while(length!=0)
{
for(i=1+length; i<=index; ++i)
{
if(list[i]<list[i-length])
{
list[0]=list[i];
for(j=i-length;j>0&&list[0]<list[j];j-=length)
list[j+length]=list[j];
list[j+length]=list[0];
}
}
length=length/2;
}
}


void main()
{
int list[20];
int node;
int i,index;

printf("\nPlease input the values you want to sort(exit for 0):\n");

index=0;
scanf("%d",&node);
while(node!=0)
{
list[index+1]=node;
index++;
scanf("%d",&node);
}

printf("The Source values:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n"); ;
printf("index=%d",index);

ShellSort(list,index);

printf("\nThe final sorting result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
getch();
}


2006-06-04 19:37
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

快速排序

#include<stdio.h>
void bubble sort(int *list,int index)
{
int i,j;
int change=1;
int temp;
for(j=index,change=1; j>=1; j--)
{
change=0;
for(i=1; i<j; i++)
{
if(list[i]>list[i+1])
{
temp=list[i+1];
list[i+1]=list[i];
list[i]=temp;
change=1;
}
}
printf("\nThe current sortint result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
}
}


void main()
{
int list[20];
int i,index;
int node;
printf("\nPlease input the values you want to sort(exit for 0):\n");
index=0;

scanf("%d",&node);
while(node!=0)
{
list[index+1]=node;
index++;
scanf("%d",&node);
}

printf("The Source values:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n");

bubblesort(list,index);

printf("\nThe final sorting result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
}


2006-06-04 19:40
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

快速排序
#include<stdio.h>/*快速排序法*/
int Partition(int *list,int low,int high)
{
int pivot;
list[0]=list[low];
pivot=list[low];
while(low<high)
{
while(low<high && list[high]>=pivot)
--high;
list[low]=list[high];
while(low<high && list[low]<=pivot)
++low;
list[high]=list[low];
}
list[low]=list[0];
return low;
}

void QSort(int *list,int low,int high,int index)
{
int i;
int pivotloc;
if(low<high)
{
pivotloc=Partition(list,low,high);
QSort(list,low,pivotloc-1,index);
QSort(list,pivotloc+1,high,index);
}
printf("Current sorting result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n");
}

void QuickSort(int *list,int index)
{
QSort(list,1,index,index);
}

void main()
{
int list[20];
int i,index;
int node;
printf("\nPlease input the values you want to sort(exit for 0):\n");

index=0;
scanf("%d",&node);
while(node!=0)
{
list[index+1]=node;
index++;
scanf("%d",&node);
}

printf("The Source values:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n");

QuickSort(list,index);

printf("\nThe final sorting result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
}


2006-06-04 19:46
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 
第四个为冒泡排序,不好意思

2006-06-04 19:47
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 
直接选择排序


void SelectSort(SeqList R)
 {
int i,j,k;
for(i=1;i<n;i++){//做第i趟排序(1≤i≤n-1)
k=i;
for(j=i+1;j<=n;j++) //在当前无序区R[i..n]中选key最小的记录R[k]
if(R[j].key<R[k].key)
k=j; //k记下目前找到的最小关键字所在的位置
if(k!=i){ //交换R[i]和R[k]
R[0]=R[i];R[i]=R[k];R[k]=R[0]; //R[0]作暂存单元
} //endif
} //endfor
} //SeleetSort



这个没写完,主函数没写

2006-06-04 19:50
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 

堆排序


#include<stdio.h>
/*建立堆*/
void HeapAdjust(int *Heap,int root,int index)
{
int j;
int temp;
int finish;

j=2*root;
temp=Heap[root];
finish=0;

while(j<=index && finish==0)
{
if(j<index)
if(Heap[j]<Heap[j+1])
j++;
if(temp>=Heap[j])
finish=1;
else
{
Heap[j/2]=Heap[j];
j=2*j;
}
}
Heap[j/2]=temp;
}
/*进行堆排序*/
void HeapSort(int *Heap,int index)
{
int i,j,temp;
/*将二叉树转换成堆*/
for( i=(index/2); i>=1; i--)
HeapAdjust(Heap,i,index);
/*开始进行堆排序*/
for(i=index-1; i>=1;i--)
{
temp=Heap[i+1];
Heap[i+1]=Heap[1];
Heap[1]=temp;

HeapAdjust(Heap,1,i);

printf("Sorting process:\n");
for(j=1; j<=index; j++)
printf("%d ",Heap[j]);
printf("\n");
}
}

void main()
{
int list[20];
int node;
int i,index;
printf("\n Please input the values you want to sort:\n");

index=0;
scanf("%d",&node);
while(node!=0)
{
list[index+1]=node;
index++;
scanf("%d",&node);
}

printf("Source Values:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n");

HeapSort(list,index);
printf("\nSorting result:");
for(i=1; i<=index; i++)
printf("%d ",list[i]);
printf("\n");
getch();
}


2006-06-04 19:51
carollvy
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-6-4
收藏
得分:0 
各 位,谢 谢 拉

2006-06-04 19:51
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
干吗要组成一个函数?这不是很好吗?

2006-06-04 20:33
快速回复:[求助]一个函数怎么样包括六种排序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023414 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved