一、冒泡排序算法:
void Bubblesort(int arry[],int len)//冒泡排序算法 ,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++];
}
}
七、折半查找(二分法查找)
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;
}
八、折半查找的递归算法:
int BinarySearch(int arr[],int key,int low,int high)//折半查找的递归做法
{
if(low>high)
{
return -1; //没有找到返回-1;
}
else
{
int mid=(low+high)/2;
if(arr[mid]==key)
return mid;
else if(arr[mid]>key)
{
BinarySearch(arr,key,low,mid-1);
}
else if(arr[mid]<key)
{
BinarySearch(arr,key,mid+1,high);
}
}
}
九、顺序查找:
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
}