六大排序算法程序如下:
#include<stdio.h>
/*void Bubblesort(int arry[],int len)//冒泡排序算法
{
int i,j;
for(i=0;i<len-1;i++)
{
for(j=i+1;j<len;j++)
{
if(arry[j]<arry[i])
{
int temp=arry[i];
arry[i]=arry[j];
arry[j]=temp;
}
}
}
}*/
/*void Selectsort(int arry[],int len)//选择排序算法
{
int i,j;
for(i=0;i<len-1;i++)
{
int loc=i;
for(j=i+1;j<len;j++)
{
if(arry[j]<arry[loc])
{
loc=j;
}
}
if(loc!=i)
{
int temp=arry[i];
arry[i]=arry[loc];
arry[loc]=temp;
}
}
}*/
/*void Insertionsort(int arry[],int len)//直接插入排序算法
{
int i,j;
for(i=1;i<len;i++)
{
int temp=arry[i];
for(j=i-1;j>=0&&arry[j]>temp;j--)
{
arry[j+1]=arry[j];
}
arry[j+1]=temp;
}
}*/
/*void Shellsort(int arry[],int len)//希尔排序算法 (缩小间距的排序)
{
int x,i,j;
int d=len;//间距d
while(d>1)
{
d=d/2;
for(x=0;x<d;x++)
{
for(i=x+d;i<len;i++)
{
int temp=arry[i];
for(j=i-d;j>=0&&arry[j]>temp;j-=d)
{
arry[j+d]=arry[j];
}
arry[j+d]=temp;
}
}
}
} */
int fun(int arry[],int low,int high);//函数声明
void Quicksort(int arry[],int low,int high)//快速排序算法
{
int loc;
if(low<high)
{
loc=fun(arry,low,high);
Quicksort(arry,low,loc-1);
Quicksort(arry,loc+1,high);
}
}
int fun(int arry[],int low,int high)
{
int temp=arry[low];
while(low<high)
{
while(low<high&&arry[high]>temp)
{
high--;
}
arry[low]=arry[high];
while(low<high&&arry[low]<temp)
{
low++;
}
arry[high]=arry[low];
}
arry[low]=temp;
return low;
}
/*void Merge(int arry[],int low,int mid,int high,int temparry[]);//函数声明
void Mergesort(int arry[],int low,int high,int temparry[])//二元归并算法
{
int mid;
if(low<high)
{
mid=(low+high)/2;
Mergesort(arry,low,mid,temparry);//左边归并排序
Mergesort(arry,mid+1,high,temparry);//右边归并排序
Merge(arry,low,mid,high,temparry);//将两个有序子数组合并
}
}
void Merge(int arry[],int low,int mid,int high,int temparry[])
{
int i=low;//左序列指针
int j=mid+1;//右序列指针
int t=0;//临时数组指针
while(i<=mid&&j<=high)
{
if(arry[i]<=arry[j]){
temparry[t++]=arry[i++];
}else{
temparry[t++]=arry[j++];
}
}
while(i<=mid)//将左端剩余的数放进临时数组
{
temparry[t++]=arry[i++];
}
while(j<=high)//将右端剩余的数放进临时数组
{
temparry[t++]=arry[j++];
}
t=0;
while(low<=high)//将临时数组的数放进arry数组
{
arry[low++]=temparry[t++];
}
}*/
void display(int arry[],int len)//显示函数
{
for(int i=0;i<len;i++)
printf("%d ",arry[i]);
}
int main()
{
int arry[]={10,9,8,7,66,5,4,3,2,1};
int len=sizeof(arry)/sizeof(arry[0]);
int temparry[len]; //临时数组temparry
display(arry,len);
printf("\n");
//Bubblesort(arry,len);
//Selectsort(arry,len);
//Insertionsort(arry,len);
//Shellsort(arry,len);
Quicksort(arry,0,len-1);
//Mergesort(arry,0,len-1,temparry);
display(arry,len);
return 0;
}
常见的两大查找算法程序如下:
#include<stdio.h>
/*int Ssearch(int arr[],int key,int len)//顺序查找算法
{
int i;
for(i=0;i<len;i++)
{
if(arr[i]==key)
return i;//返回数组下标
}
return -1;//没有找到返回-1
}*/
int BinarySearch(int arr[],int key,int len)//二分法查找(顺序表)
{
int low=0,high=len-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(arr[mid]==key)
return mid;//返回数组下标
else if(arr[mid]<key)
low=mid+1;
else if(arr[mid]>key)
high=mid-1;
}
return -1;
}
void display(int arr[],int len)//显示函数
{
int i;
for(i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int len=sizeof(arr)/sizeof(arr[0]);//求数组长度
display(arr,len);
int key; scanf("%d",&key);//输入要查找的数
//int temp=Ssearch(arr,key,len);//顺序查找
int temp=BinarySearch(arr,key,len);//二分法查找
if(temp>=0) printf("%d",temp);
else printf("error!");
return 0;
}