• 算法测试(课上测试)


    1. Ubuntu下支持哪些C语言的排序算法,查找算法?你是怎么得到的?提交截图

    1. 针对下面的数组,调用Linux的 快速排序或二分查找算法。查找算法查自己的学号。
      用随机数函数产生10个 1-1000之间的数存到一个数组int arr[11]中, arr[10] = 你学号的后三位。
    #include <stdio.h>
    #include <stdlib.h>
    
    #define BUF_SIZE 10
    
    int binary(int* arr, int value, int length)
    {
            int left,right,mid;
            left = 0;
            right = length - 1;
            mid = (left+right)/2;
    
            while(left <= right)
            {
                    if(arr[mid] < value)
                    {
                            left = mid + 1;
                    }
                    else if(arr[mid] > value)
                    {
                            right = mid - 1;
                    }
                    else
                    {
                            break;
                    }
                    mid = (left+right)/2;
            }
    
            if(arr[mid]==value)
                    return mid;
    
            return -1;
    }
    
    void display(int array[], int maxlen)
    {
        int i;
    
        for(i = 0; i < maxlen; i++)
        {
        printf("%d\t", array[i]);
        }
        printf("\n");
    
        return ;
    }
    
    void QuickSort(int *arr, int low, int high)
    {
        if (low < high)
        {
            int i = low;
            int j = high;
            int k = arr[low];
            while (i < j)
            {
                while(i < j && arr[j] >= k)     // 从右向左找第一个小于k的>数
                {
                    j--;
                }
                if(i < j)
                {
                    arr[i++] = arr[j];
                }
    
                while(i < j && arr[i] < k)      // 从左向右找第一个大于等于k的数
                {
                    i++;
                }
    
                if(i < j)
                {
                    arr[j--] = arr[i];
                }
            }
    
            arr[i] = k;
    
            // 递归调用
            QuickSort(arr, low, i - 1);     // 排序k左边
            QuickSort(arr, i + 1, high);    // 排序k右边
        }
    }
    
    // 主函数
    int main()
    {
        int maxlen = BUF_SIZE;
    
        int arr[11]={0};
        int i,j=0;
        srand((unsigned int)time(NULL));
        for(i=0;i<11;i++)
        {
            arr[i]=rand()%1000+1;
        }
        arr[10]=316;
        printf("排序前的数组\n");
        display(arr,11);
    
        QuickSort(arr, 0, 10);  // 快速排序
    
        printf("排序后的数组\n");
        display(arr, 11);
    
        int input;
            printf("请输入需要查找的数字:");
            scanf("%d",&input);
    
            int index = binary(arr, input, 11);
    
            if(index == -1)
            {
                    printf("没有找到");
            }
            else
            {
                    printf("找到了,索引为:%d\n",index);
            }
    
        return 0;
    }
    
    

    运行结果如下,学号后三位为316.随机产生的数组每次不一样,最后一个是学号后三位316

  • 相关阅读:
    基础:按值传递引用类型,按引用传递引用类新 细说并沉淀
    抽象与具体
    EXTJS 零星记录 VS2008中EXTJS智能提示插件
    javascript 与 coffescript来回转换:http://js2coffee.org/
    一个冒号引发的血案
    我基本上差不多做过了coffescript所做的事
    javascript的闭包中保存的是引用与循环中事件函数处理
    用webstorm调试coffeescript
    coffeescript 下的构造函数中如何使用return语句?
    coffeescript中的forin和forof
  • 原文地址:https://www.cnblogs.com/ffffatal/p/15682601.html
Copyright © 2020-2023  润新知