1.二分查找
效果
二分查找代码
//二分查找
int binary_sort(int* p,int sz,int aim)
{
int left=0;
int right=sz-1;
int mid=0;
while(left<=right)
{
mid=(left+right)/2;
if(p[mid]>aim)
right=mid-1;
else if(p[mid]<aim)
left=mid+1;
else
return mid;
}
return -1;
}
完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//二分查找
int binary_sort(int* p,int sz,int aim)
{
int left=0;
int right=sz-1;
int mid=0;
while(left<=right)
{
mid=(left+right)/2;
if(p[mid]>aim)
right=mid-1;
else if(p[mid]<aim)
left=mid+1;
else
return mid;
}
return -1;
}
int main(int argc, const char *argv[])
{
int arr[100];
int i=0;int sz=0;
int aim=0;
printf("please input array\n");
while(1)
{
scanf("%d",&arr[i]);
i++;
sz++;
if(getchar()=='\n')
break;
}
printf("please input aim_number\n");
scanf("%d",&aim);
int pos=binary_sort(arr,sz,aim);
if(pos>=0)
printf("find,pos=%d\n",pos+1);
else
printf("no find\n");
return 0;
}
2.快排
效果
快排代码
//一次排序
int one_sort(int* p,int left,int right)
{
int key=p[left];
while(left<right)
{
while(key<=p[right]&&left<right)
right--;
p[left]=p[right];
while(key>=p[left]&&left<right)
left++;
p[right]=p[left];
}
p[left]=key;
return left;
}
//快排
void quick_sort(int* p,int left,int right)
{
if(left>right)
return;
int pos=one_sort(p,left,right);
quick_sort(p,left,pos-1);
quick_sort(p,pos+1,right);
}
完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//一次排序
int one_sort(int* p,int left,int right)
{
int key=p[left];
while(left<right)
{
while(key<=p[right]&&left<right)
right--;
p[left]=p[right];
while(key>=p[left]&&left<right)
left++;
p[right]=p[left];
}
p[left]=key;
return left;
}
//快排
void quick_sort(int* p,int left,int right)
{
if(left>right)
return;
int pos=one_sort(p,left,right);
quick_sort(p,left,pos-1);
quick_sort(p,pos+1,right);
}
int main(int argc, const char *argv[])
{
int arr[100];
int i=0;int sz=0;
printf("please input \n");
while(1)
{
scanf("%d",&arr[i]);
i++;
sz++;
if(getchar()=='\n')
break;
}
quick_sort(arr,0,sz-1);
for(i=0;i<sz;i++)
printf("%d ",arr[i]);
puts("");
return 0;
}