xiangjingyi 发表于 2023-11-12 13:22

xiangjingyi Web安全 学习笔记

1冒泡排序对存放原始数据的数组,按从前往后的方向进行多次扫描,每次扫描称为一趟。当发现相邻两个数据的次序与排序要求的大小次序不相符时,即将这两个数据进行交换。如果从小到大排序,这时,较小的数据就会逐个向前移动,好像气泡上升一样。#include <stdio.h>#include <stdlib.h>
/*从小往大排序(以五个数为例)*/
int main()
{   int arr,i,j,temp;
    for(i=0;i<5;i++)
      scanf("%d",&arr);/*从键盘上输入数组的各个元素*/
    for(i=0;i<5-1;i++)/*外层循环*/
    {
      for(j=0;j<5-i-1;j++)/*内层循环*/
      {
            if(arr>arr)/*比较大小*/
            {
                temp=arr;
                arr=arr;/*交换大小与排序位置不相符的两个相邻的数的值*/
                arr=temp;
            }
      }
    }
    for(i=0;i<5;i++)
      printf("%d ",arr);/*输出排号的数字*/
    return 0;
}
2选择排序从头到尾扫描排序,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。#include <stdio.h>
#include <stdlib.h>
/*选择排序(以七个数字为例)*/
int main()
{
   int a, i, j, k, x;
   for(i=0;i<7;i++)
      scanf("%d",&a);/*输入七个数字*/
   for(i=0;i<6;i++)
   {
       k=i;/*先把第一个定位最小值的k*/
       for(j=i+1;j<7;j++)/*再往后挨个比较,如果有更小的,*/
                         /*就把它和k互换,并不断循环*/
       if(a<a)
      k=j;
       if(i!=k)
       {
         x=a;
         a=a;
         a=x;
       }
   }
   for(i=0;i<7;i++)
    printf("%d ",a);/*输出排好的七个数字*/
   return 0;
}
3.二分查找有n个数字,若要从中找出某一个,按顺序查找,最坏要查找n次,即复杂程度为n。但若是使用二分查找,效率会更快,复杂度只有log2n。#include <stdio.h>
#include <stdlib.h>
/*以从数组1到10中找出7为例*/
int main()
{
   int arr[]={1,2,3,4,5,6,7,8,9,10};
   int k=7;
   int sz=sizeof(arr)/sizeof(arr);/*计算arr的长度*/
   int left=0;
   int right=sz-1;/*最右边的数的下标为长度减1*/
   while(left<=right)
   {
       int mid=(left+right)/2;
       if(arr>k)
          right=mid-1;
       else if(arr<k)
          left=mid+1;
       else
      {printf("找到了,下标是:%d\n",mid);
      break;}
   }
   if(left>right)
    {printf("找不到\n");}
    return 0;
}
页: [1]
查看完整版本: xiangjingyi Web安全 学习笔记