今天,主要写写五个排序和两个查找,排序分别为:冒泡排序,选择排序,直接插入排序,希尔排序以及快速排序,查找则分为顺序查找和二分查找(递归和非递归)
冒泡排序
int i,j,t;
for(i=0;i<len-1;++){
for(j=0;j<len-i-1;j++){
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
选择排序
int fun(int a[],int len){
int i,j,t,min;
for(i=0;i<len;i++){
min=i;
for(j=i+1;j<len;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
t=a[min];
a[min]=a[i];
a[i]=t;
}
}
}
直接插入排序
int fun(int a[],int len){
int i.j.t;
for(i=1;i<len;i++){
t=a[i];
for(j=i-1;j>=0&&a[j]>t;j--){
a[j+1]=a[j];
}
a[j+1]=t;
}
}
希尔排序
int fun(int a[],int len,int dk){
int i,j,t;
for(i=dk;i<len;i++){
if(a[i]<a[i-dk]){
t=a[i];
j=i-dk;
for(;j>=0&&t<a[i];j=j-dk){
a[j+dk]=a[j];
}
arr[j+dk]=t;
}
}
}
快速排序
int fun(int a[],int loe,int high){
int pivot=a[low];
while(low<high){
while(low<high&&a[high]>=pivot){
high--;
}
arr[low]=a[high];
while(low<high&&a[low]<=pivot){
low++;
}
a[high]=a[low];
}
a[low]=pivot;
return low;
}
int fun2(int a[],int low,int high){
if(low<high){
int pivot=fun(a,low,high);
fun2(a,low,pivot-1);
fun2(a,pivot+1,high);
}
}
查找
顺序查找
int fun(int a,int len,int value){
int i;
for(i=0;i<lem;i++){
if(a[i]==value){
retrun i;
}
}
return -1;
}
二分查找(非递归)
int fun(int a[],int loe,int high,int key){
int mid;
while(low<high){
mid=(low+high)/2;
if(key==a[mid]){
return mid;
}
else if(key<a[mid]){
low=mid+1;
}
else{
high=mid-1;
}
}
return -1;
}
二分查找(递归)
int fun(int a[],int low,int high,int key){
int mid;
while(low<=high){
mid=(high+low)/2;
if(key==a[mid]){
return mid;
}
else if(key>a[mid]){
return fun(a,mid+1,high,key);
}
else{
return fun(a,low,mid-1,key);
}
}
return -1;
}
今天的内容就到这里了,感谢大家观看哦~