排序
内部排序
将需要处理的数据加载到内部存储器中(内存中)
冒泡排序
每一轮的每一次比较只比较相邻两个数字,若大小有问题,则交换
第一轮需要比较全部,第一轮会把最大的数排到最后
第二轮需要比较前几个,最后一个不参与,第二轮会把第二大的数排到倒数第二
有n个数只需比较n-1轮
#include <stdio.h>
void main(){
int arr[]={2,0,7,-2,5,4};
int len=sizeof(arr)/sizeof(int);
//第一轮
int i, j;
int temp;
//len(arr)=5,不是6,第一轮比较了5次
for(i=0;i<len;i++){
for(j=0;j<len-i;j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<len;i++){
printf("arr[%d]=%d ",i,arr[i]);
}
}
查找
一般查找,二分查找
#include <stdio.h>
//顺序查找
int seqSearch(int arr[],int arrlen,int val){
int i;
for(i=0;i<arrlen;i++){
if (arr[i]==val){
return i;
}
}
//如果在for循环中,没有执行到return,说明未找到
return -1;
}
//二分查找:前提有序数组:用中间的数与所要查找的数进行比较,若查找的数小,则在左边查找
int binarySearch(int arr[],int leftIndex,int rightIndex,int findVal){
//如果leftIndex>rightIndex,代表没有找到
int midIndex=(leftIndex+rightIndex)/2;
int midVal=arr[midIndex];
if(leftIndex>rightIndex){
return -1;
}
if(findVal<midVal){
binarySearch(arr,leftIndex,midIndex-1,findVal);
}
else if(findVal>midVal){
binarySearch(arr,midIndex+1,rightIndex,findVal);
}
else{
return midIndex;
}
}
void main(){
int i;
int arr[]={1,2,4,-1};
int len = sizeof(arr)/sizeof(int);
int j =seqSearch(arr,len,2);
//printf("j=%d",j);
int arrf[]={1,2,4,7,8,6,8,9};
int lenf=sizeof(arrf)/sizeof(int);
printf("%d\n",lenf);
int Index=binarySearch(arrf,0,lenf,20);
printf("%d",Index);
}