算法的学习 — 冒泡排序

 //冒泡排序算法的思路是:

    //1.n个数,i每相邻的两个数作比较,外层比较n-1次,如 4个数,3,2,1,4 ->3与2比,3再与1比,3再与4比,所以是n-1次,因为从0坐标开始,最大是<n-1,

    //2.内层是n-i-1,因为上面2已经与3比较了,所以是n-i-1次,如2不再与之前的3比了,因为已经比了,2比1,2比4->1不和2、3比了,直接和4比。

    //3.如果从小到大,第一次是2,1,3,4 (3与1,2,4比) ;第二次是1,2,3,4(1与2,4比);第三次是1,2,3,4 (4只和3比较)。

    //4.最小的时间复杂度是o(n),最大的时间复杂度是o(n平方)。

    //方案1,自定义一些数字,需要存储数据的数组,交换的两个数i,j ,比较n个数,用来交换的temp

    //->1
void bubble_sore (int a[],int n);
void bubble_sore (int a[],int n){
    int i,j,temp;
    for (i = 0; i< n-1; i++) {//从第一个元素开始
        for (j = 0; j <n-1-i; j++) {
            if(a[j] > a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}
#include <stdio.h>
#define size 10
int main(int argc, const char * argv[]) {

    //->2
    int a[size] = {100,200,3,6,4,9,333,44,444,332};
    bubble_sore(a, size);
    for (int i = 0; i < size; i++) {
        printf("%d\n",a[i]);
    }
    return 0;
}

未完待续。。。。。。。。。。

时间: 2024-10-13 00:12:30

算法的学习 — 冒泡排序的相关文章

排序算法系列:冒泡排序与双向冒泡排序

概述 排序算法应该算是一个比较热门的话题,在各个技术博客平台上也都有一些博文进行了一定程度的讲解.但还是希望能从自我完善的角度出发,可以更详细.全面.形象地表达这些算法的精髓.本文就先从最简单的冒泡排序开始说起,别说你已经彻底了解了冒泡排序算法(虽然一开始我也是这样以为的). 版权说明 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/50474230 – Coding-Naga - 转载请注明出处 目录 概述 版权说明 目录 冒

数据结构与算法基础学习笔记

*********************************************            ---算法与数据机结构--- 数据结构:由于计算机技术的发展,需要处理的对象不再是纯粹的数值,还有像字符,表,图像等具有一定结构的数据,需要用好的算法来处理这些数据. 我们把现实中大量而又复杂的问题以特定的数据类型的特定的存储结构保存到主存储器中,以及在此基础上为实现某个功能而执行的相应操作(查找排序),这个相应的操作也叫算法. 数据结构 = 个体 +个体的关系算法 =对存储数据的操

几种排序算法的学习,利用Python和C实现

之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算时通常是反复调用同一个方法,递归n次,就需要n个空间. 2.时间复杂度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n).一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)

算法导论学习---红黑树具体解释之插入(C语言实现)

前面我们学习二叉搜索树的时候发如今一些情况下其高度不是非常均匀,甚至有时候会退化成一条长链,所以我们引用一些"平衡"的二叉搜索树.红黑树就是一种"平衡"的二叉搜索树,它通过在每一个结点附加颜色位和路径上的一些约束条件能够保证在最坏的情况下基本动态集合操作的时间复杂度为O(nlgn).以下会总结红黑树的性质,然后分析红黑树的插入操作,并给出一份完整代码. 先给出红黑树的结点定义: #define RED 1 #define BLACK 0 ///红黑树结点定义,与普通

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

1.算法思想 问题描述:从数组array中找出第i小的元素(要求array中没有重复元素的情况),这是个经典的"线性时间选择(Selection in expected linear time)"问题. 思路:算法导论215页9.2 Selection in expect linear time 2.java实现 思路:算法导论216页伪代码 /*期望为线性时间的选择算法,输入要求,array中没有重复的元素*/ public static int randomizedSelect(i

算法的学习就像打副本

想连续几周每天都研究算法是不怎么现实的一件事情. 算法的学习就像打副本.网游大都是这样子的,团本每周都有固定的CD,每个团本有几个BOSS,相应的BOSS掉落固定的装备和材料等.首先,团本有周CD,若没有CD,可以天天打,不出2个月就打吐了,算法的学习也差不多,每周花个3到8小时来研究一下,刷刷题,也是比较好的一件事,若超过20小时在算法上,大脑也会抗拒的,因此不宜过多,掌握好节奏很重要.然后,每个BOSS都有相应的机制需要熟悉,算法也是这样,每道算法题都是有一点的技巧在里面的,你需要牢固掌握才

算法导论学习---红黑树详解之插入(C语言实现)

前面我们学习二叉搜索树的时候发现在一些情况下其高度不是很均匀,甚至有时候会退化成一条长链,所以我们引用一些"平衡"的二叉搜索树.红黑树就是一种"平衡"的二叉搜索树,它通过在每个结点附加颜色位和路径上的一些约束条件可以保证在最坏的情况下基本动态集合操作的时间复杂度为O(nlgn).下面会总结红黑树的性质,然后分析红黑树的插入操作,并给出一份完整代码. 先给出红黑树的结点定义: #define RED 1 #define BLACK 0 ///红黑树结点定义,与普通的二

算法导论 学习资源

学习的过程会遇到些问题,发现了一些比较好的资源,每章都会看下别人写的总结,自己太懒了,先记录下别人写的吧,呵呵. 1  Tanky Woo的,每次差不多都看他的 <算法导论>学习总结 - 1.前言 <算法导论>学习总结 - 2.第一章 && 第二章 && 第三章 <算法导论>学习总结 - 3.第四章 && 第五章 <算法导论>学习总结 - 4.第六章(1) 堆排序 <算法导论>学习总结 - 5.第六

【算法导论学习-014】计数排序(CountingSortTest)

参考:<算法导论>P194页 8.2节 Counting sort 1.Counting sort的条件 待排序数全部分布在0~k之间,且k是已知数:或者分布在min~max之间,等价于分布在0~max-min之间,max和min是已知数. 2.java 实现 /** * 创建时间:2014年8月17日 下午3:22:14 项目名称:Test * * @author Cao Yanfeng * @since JDK 1.6.0_21 类说明: 计数排序法,复杂度O(n), 条件:所有数分布在0