1.冒泡排序:
what:将元素进行两两比较,大的(小的)向后排。
when:数组中有多个元素,需要进行比较排序比较的时候使用。
how:N个数字来排队,两两比较小靠前。(升序)
外层循环:N-1(控制比较的轮数)
内层循环:N-1-i(控制每轮比较的的次数,i代表外层循环变量)
for example:
int num[5];
int i,k,j,temp;
for(i=0;i<5;i++)
{
printf("请输入5个元素\n");
scanf("%d",&num[i]);
}
for(i=0;i<4;i++)
{
for(k=0;k<4-i;k++)
{
if(num[k]>num[k+1])//注意不能是num[k]>num[k-1]
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
}
for(j=0;j<5;j++)
{
printf("%d\n",num[j]);
}
2.二分法查找(折半查找):前提查找的元素必须有序。
what:将待查找的元素与数组中的中间位置元素进行比较。
when:要查找数组中某一元素。
how:将待查找的数字与数组中的中间位置进行比较。
如果比中间位置的元素值小,去左边查找(更改结束位置)。
如果比中间位置的元素值大,去右边查找(更改起始位置)。
for example:
int nums[9]={1,2,3,4,5,6,7,8,9};
int i=0,left,right,mid,search;
left=0;
right=8;
printf("请输入要查找的值\n");
scanf("%d",&search);
while(left<=right) //当为偶数序列时会出现相等的情况
{
i++;
mid=(left+right)/2;
if(search<nums[mid])
{
right=mid-1;
}
else if(search>nums[mid])
{
left=mid+1;
}
else
{
break;
}
}
printf("查找这个%d一共用了%d次\n",search,i);