博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言基础总结 ( 二 )----------数组总结( 重点排序算法 )
阅读量:6697 次
发布时间:2019-06-25

本文共 1769 字,大约阅读时间需要 5 分钟。

?
写一个程序,初始化一个数组。要求数组长度为10,里面的值为0-9的随机数,并且每一个数字出现一次。
思路:
 1,创建数组
 2,创建随机数
 3,存到数组中 nums[i++] = ...
 4,使用循环创建数据,并加入到数组中.循环几次? while(i < 10)
 5,创建数字,判断数组中是否有该数字,如果没有就加入,如果有就重新创建
 6,如何判断一个数字在数组中或不在数组中呢?
 int nums[] = {1,2,3};
 3在不在,4在不在?
 遍历一下,看直到遍历结束,如果都没有这个数字,就表示不存在
 数组初始化?
 
 
用代码来实现:
  int nums[LEN], i = 0, temp, index;
    while (i < 10) {
        temp = arc4random_uniform(10);
        // 循环用随机数和数组元素比较,看是否相等
        for (index = 0; index < i; index++) {
            if (temp == nums[index]) {
                break;
            }
        }
        // index == i说明for循环结束,随机数和数组元素不相等
        if (index ==  i) {
            nums[i++] = temp;
        }
    }
    // 循环结束,把随机数打印出来
    for (int j = 0; j < 10; j++) {
        printf("%d\t%d\n", j + 1, nums[j]);
    }
 
 
 
?
冒泡排序(大的放右边)
void bubbleSort(int nums[], int lengh){
    for (int i = 0; i < lengh - 1; i++) {
        for (int j = 0; j < lengh - 1 - i; j++) {
            if (nums[j] > nums[j + 1]) {
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
}
 
?
选择排序(小的放左边)
void chooseSort(int nums[], int length){
    for (int i = 0; i < length - 1; i++) {
        for (int j = i; j < length; j++) {
            if (nums[j] < nums[i]) {
                int temp = nums[j];
                nums[j] = nums[i];
                nums[i] = temp;
            }
        }
    }
}
 
☺️
选择排序优化:
int min = -1;
    for(int j = 0; j < 4 - 1; j++) {
        min = j; // 记录了最小取值的下标(索引)
        for (int i = j + 1; i < 4; i++) {
            if(nums[min] > nums[i]) {
                min = i;
            }
        }
       
        // 将最小的与第j项交换
        if(min != j) {
            temp = nums[min];
            nums[min] = nums[j];
            nums[j] = temp;
        }
    }
 
 
?
二分法查找数据  
前提:数组是从小到大排列的
// 二分法就是折中来求,目标数据大于中间数,就在右半边中找,循环执行...
// 假定找到目标数据,就返回它的下标,如果没找到,就返回-1
int indexOf(int nums[], int length, int keydata){   // keydata 表示要找的目标数据
// 由于要执行循环的次数未知,所以用while循环来实现
    int low = 0, high = length - 1,mid;
    while (low <= high) {
        mid = (low + high) / 2;
        if (keydata == nums[mid]) {
            return mid;
        }else if (keydata > nums[mid]){
            low = mid + 1;
        }else high = mid - 1;
    }
    return -1;
}
 

转载于:https://www.cnblogs.com/zhaoyanpeng/p/4348995.html

你可能感兴趣的文章
我的友情链接
查看>>
关于我
查看>>
PowerShell变量——PowerShell三分钟(七)
查看>>
安装perl5.10.0
查看>>
【学习笔记】在storyboard中给TabViewController添加tab页面
查看>>
注册广播
查看>>
Mybatis 拦截器介绍
查看>>
我的友情链接
查看>>
oracle中游标的使用
查看>>
4月26日作业
查看>>
我的友情链接
查看>>
SRV记录注册不成功的可能的原因
查看>>
java的自动类型转换和强制类型转换
查看>>
如何循环遍历document.querySelectorAll()方法返回的结果
查看>>
linux输出文字的颜色特效
查看>>
自动化测试框架
查看>>
我的友情链接
查看>>
SharePoint Server 2016 PWA(Project web app) 被变为只读模式
查看>>
学习批处理之安装一键装机必备软件
查看>>
我的友情链接
查看>>