关于二分法查找,冒泡排序,选择排序的实现
#include <stdio.h>
void maopao(int* arr,int len);
void xuanze(int* arr,int len);
void kuaipai(int* arr);
void show(int* arr,int len);
int erfen(int* arr,int left,int right,int s);
int main(int argc, const char *argv[])
{
int arr[] = {1,8,-2,3,8,95,25,17,-3};
// maopao(arr,9);
xuanze(arr,9);
show(arr,9);
printf("-----------------------------------------\n");
int arr1[] = {1,2,3,4,5,6,7,8,9};
int x;
x = erfen(arr1,0,8,8);
printf("本次查找结果下标为:%d",x);
return 0;
}
/*
* function: 冒泡排序(升序)
* @param [ in]
* @param [out]
* @return
*/
void maopao(int* arr,int len){
int data;
for(int i=0;i<len-1;i++){
for(int j = 0;j<len-i-1;j++){
if(arr[j] > arr[j+1]){
data = arr[j];
arr[j] = arr[j+1];
arr[j+1] = data;
}
}
}
}
/*
* function:遍历
* @param [ in]
* @param [out]
* @return
*/
void show(int* arr,int len){
for(int i = 0;i<len;i++){
printf("%d\t",arr[i]);
}
printf("\n");
}
/*
* function:选择排序
* @param [ in]
* @param [out]
* @return
*/
void xuanze(int* arr,int len){
int a;
for(int i=0;i<len-1;i++){
int data=0;
for(int j=0;j<len-i;j++){
if(arr[j] > arr[data]){
data = j;
}
}
a = arr[len-i-1];
arr[len-i-1] = arr[data];
arr[data] = a;
}
}
/*
* function:2分法查找
* @param [ in]
* @param [out]
* @return
*/
int erfen(int* arr,int left,int right,int s){
int p = (left+right)/2;
while(left!=right){
if(arr[p] >s){
right = p-1;
p=(left+right)/2;
}else if(arr[p] <s){
left = p+1;
p=(left+right)/2;
}else if(arr[p] == s){
return p;
}
}
return -1;
}