C语言:“冒泡排序”与“二分法”

时间:2024-03-09 22:50:24

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);