专栏首页用户3288143的专栏C算法分析与设计_用户指定数组,值随机产生,两种算法求最小差的绝对值【并使用计时法和计数法】

C算法分析与设计_用户指定数组,值随机产生,两种算法求最小差的绝对值【并使用计时法和计数法】

法1 暴力:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    printf("请输入数组内要存放的数字个数:\n");
    int number;
    scanf("%d",&number);
    int array[number-1];
    int begintime,endtime;
    int count_turn = 0;
    srand(time(NULL));
    printf("以下随机数自动产生:\n");
    for(int i = 0; i < number; i++){
        array[i] = 0 + rand()%number;
        printf("%d\t",array[i]);
    }

    begintime=clock();
    //冒泡排序
    for(int i = 0; i < number-1; i++){
        for(int j = i+1; j < number; j++){
            if(array[i]>array[j]){
                int temp = 0;
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
                ++count_turn;
            }
        }
    }
        int temp = 0 ,min = 100;
    for(int i = 0; i < number;i ++){
        temp = array[i+1]-array[i];
            ++count_turn;
        if(temp<min){
            min = temp;
        }
    }
    endtime = clock();
    printf("\n最小差值为:%d",min);
    printf("\n\nRunning Time:%dms\n", endtime-begintime);
    printf("\ncount_turn:%d",count_turn);
    return 0;
}

 
 

法2:排序 代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    //输入
    printf("数组元素个数:\n");
    int sum = 0;
    scanf("%d",&sum);
    int array[sum-1];
    int begintime,endtime;
    int count_turn = 0;
    srand(time(NULL));

    printf("以下随机数自动产生:\n");
    for(int i = 0; i < sum; i++){
        array[i] = 0 + rand()%sum;
        printf("%d\t",array[i]);
    }


    begintime=clock();
    //暴力:两两之差的绝对值
    int min = 100, temp = 0;
    for(int i = 0; i < sum-1; i++){
        for(int j = i+1; j < sum; j++){
            ++count_turn;
            temp = array[i] - array[j];

            if(temp < 0 ){
                temp = -temp;
            }
            if(temp < min){
                min = temp;
            }
        }
    }
    endtime = clock();
    printf("\n%d", min);
    printf("\n\nRunning Time:%dms\n", endtime-begintime);
    printf("\ncount_turn:%d",count_turn);
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C算法分析与设计_用户指定数组量并定值,两种算法求最小差的绝对值

    瑞新
  • 为什么使用Spring的AOP?通过日志分析

    瑞新
  • P1421 小玉买文具——每日一题

    瑞新
  • 希尔排序

    #include<stdio.h> void ShellSort(int array[],int length) { int i,j,h,temp; ...

    用户1624346
  • java之ArrayList源码分析

    今天我们就来分析下ArrayList集合类的源码了,希望可以帮助到你,首先我们还是从集合的入口慢慢深入分析吧。还是一贯风格,看代码咯。

    后端Coder
  • 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦!

    CherishTheYouth
  • 编写一个函数fun,功能为输出该数从低位到高位上的各位数字

    花狗Fdog
  • 摩拜 [编程题] 排序次数

    小摩有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的小摩只会下面这个操作:

    week
  • Lake Counting(POJ No.2386)

    种花家的奋斗兔
  • 欧拉计划 Problem4

    题目: 最大回文乘积 回文数就是从前往后和从后往前读都一样的数。由两个2位数相乘得到的最大回文乘积是 9009 = 91 × 99。

    用户4492257

扫码关注云+社区

领取腾讯云代金券