快速排序与二分查找程序
// 快速排序
#include
void q_sort(int arr[],int low,int high);
int main()
{
intarr[10] = {0};
inti = 0;
printf("输入 10 个整数:");
for(i= 0;i < 10;i++)
scanf("%d",&arr[i]);
q_sort(arr,0,9);
for(i= 0;i < 10;i++)
printf("%d",arr[i]);
printf("");
return0;
}
void q_sort(int arr[],int low,int high)
{
inti = 0,j = 0; //i-低 j-高
intbase = 0; // 基数
inttemp = 0;
if(low>= high) // 递归终止
return;
i= low;
j= high;
base= arr[low];
while(i< j){
while(arr[j]> base)// 高->低
j--;
temp= arr[j];
arr[j]= arr[i];
arr[i]= temp;
while(arr[i]< base)// 低->高
i++;
temp= arr[j];
arr[j]= arr[i];
arr[i]= temp;
if(i j--; } q_sort(arr,low,i-1); q_sort(arr,i+1,high); } /*************************************** auth:肖乔 func:二分查找 ***************************************/ #include #define N 5 int main(){ inti,j,a[N],t; inthig,low,mid,k; printf("请输入%d个整数:",N); for(j=0;j<=N-1;j++){ scanf("%d",&a[j]); } for(i=0;i for(j=0;j if(a[j]>a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t; } printf("从小到大排列:"); for(j=0;j<=N-1;j++) printf("%d",a[j]); printf(""); #if 1 printf("请输入要查找的数:"); scanf("%d",&k); low=0;hig=N-1; while(low<=hig){ mid=(low+hig)/2; if(a[mid]==k){ printf("%d在数组中第%d位",a[mid],mid+1); break; } elseif(a[mid] low=mid+1; else hig=mid-1; } #endif return0; } 下面是系统自带快排和二分查找的函数。qsort和bsearch两个函数可以配合起来用,先排序,在查找,也可以分开使用。qsort在比较两个数大小的时候返回3个值,1、-1、0,改变1和-1的位置,就可以实现从大到小和从小到大排序。 qsort 功能:对数组base中nmemb块大小为size字节的数组快速排序。 参数:base 开始地址,nmenmb 数据块数 size 地址大小 compare 根据此指针指向的函数的返回结果来排序(0,正数和负数) 返回值:无 bsearch 功能:从地址base 开始空间的nmenmb块大小为size字节的数据中,二分查找key指针保存地址空间中的内容 参数:key查找内容的首地址base开始地址nmenmb //qsort 函数的使用 //bseach函数使用 #include #include int c_desc(const void *px,const void *py); //int c_asc(const void *px,const void *py); int main(){ intarr[10]={0}; inti=0,j=0,data=0; int*p=&j; printf("输入十个数:"); for(i=0;i<10;i++) scanf("%d",&arr[i]); printf("输入查找的数:"); scanf("%d",&data); printf("升序排列:"); qsort(arr,10,sizeof(int),c_desc); for(i=0;i<10;i++) printf("%d",arr[i]); printf(""); // printf("降序排列:"); // qsort(arr,10,sizeof(int),c_asc); // for(i=0;i<10;i++) // printf("%d",arr[i]); p=bsearch(&data,arr,10,sizeof(int),c_desc); if(p==NULL) printf("不存在"); else{ printf("存在"); printf("%d在第%d个位置",data,p-arr+1); } printf(""); return0; } int c_desc(const void *px,const void *py){ const*p1=px; const*p2=py; if(*p1==*p2) return0; elseif(*p1>*p2) return1; else return-1; } #if 0 int c_asc(const void *px,const void *py){ const*p1=px; const*p2=py; if(*p1==*p2) return0; elseif(*p1>*p2) return-1; else return1; } #endif
快速排序二分查 相关文章:
- 快速排序+二分查找与哈希表(11-28)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)