10.1:二分查找+快排(代码)
二分查找:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int search(int arr[],int key,int low,int high)
{
while(low <= high)
{
int mid = (low+high)/2;
if(key > arr[mid])
low = mid + 1;
else if(key < arr[mid])
high = mid - 1;
else
return mid;
}
return -1;
}
int main(int argc, const char *argv[])
{
int arr[]={11,22,33,44,55};
int key = 0;
printf("输入要查找的数:");
scanf("%d",&key);
int flag = 0;
int high = sizeof(arr)/sizeof(arr[0])-1;
//printf("%d\n",high);
flag = search(arr,key,0,high);
if(flag == -1)
printf("key不在数组中\n");
else
printf("key在数组第%d位\n",flag);
return 0;
}
运行结果:
快排:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int one_sort(int arr[],int low,int high)
{
int key = arr[low];
while(low < high)
{
while(low < high && key <= arr[high])
high--;
arr[low] = arr[high];
while(low < high && key >= arr[low])
low++;
arr[high] = arr[low];
}
arr[low] = key;
return low;
}
void quick_sort(int arr[],int low,int high)
{
if(low >= high)
return;
int mid = one_sort(arr,low,high);
quick_sort(arr,low,mid-1);
quick_sort(arr,mid+1,high);
}
int main(int argc, const char *argv[])
{
int arr[]={11,33,66,22,55,44,77};
int len = sizeof(arr)/sizeof(int);
quick_sort(arr,0,len - 1);
for(int i = 0;i < len;i++)
{
printf("%d ",arr[i]);
}
puts("");
return 0;
}
运行结果: