二分法查找
#include <stdio.h>
int binary_search(int arr[],int low,int high,int key)
{
int mid;
while(low<=high){
mid = (low+high)/2;
if(key > arr[mid])
low = mid+1;
else if(key<arr[mid])
high=mid-1;
else if(key == arr[mid])
return mid;
}
return -1;
}
int main(int argc, const char *argv[])
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int res;
res = binary_search(arr,0,sizeof(arr)/sizeof(arr[0])-1,4);
printf("res=%d\n",res);
return 0;
}
运行结果
冒泡排序
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[5] = {10, 11, 15, 13, 20};
int len = sizeof(arr)/sizeof(arr[0]);
int i=0, j=0;
for(i=0; i<len-1; i++)
{
for(j=0; j<len-1-i; j++)
{
if(arr[j] < arr[j+1])
{
arr[j] = arr[j]^arr[j+1];
arr[j+1] = arr[j]^arr[j+1];
arr[j] = arr[j]^arr[j+1];
}
}
}
for(i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
putchar(10);
return 0;
}
运行结果
选择排序
#include <stdio.h>
int main(int argc, const char *argv[])
{
int arr[5] = {10, 11, 15, 13, 20};
int len = sizeof(arr)/sizeof(arr[0]);
int i=0, j=0;
int mi;
for(i=0; i<len-1; i++)
{
mi=i;
for(j=i+1; j<=len-1; j++)
{
if(arr[j] > arr[mi]) //若想要从小到大,改成<
{
mi = j;
}
}
if(mi != i)
{
arr[i] = arr[i]^arr[mi];
arr[mi] = arr[i]^arr[mi];
arr[i] = arr[i]^arr[mi];
}
}
for(i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
putchar(10);
return 0;
}
运行结果