冒泡算法学习记录

bubblesort.c这是维基百科上的说明,很详细
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
    int arr[10];
    srand(time(NULL));
    int i;
    for (i = 0; i < 10; i ++)
        arr[i] = rand() % 100;
    int j;
    int tmp;
    int sign;
    for (i = 0; i < 10 - 1; i ++) {
        sign = 1;
        for (j = 0; j < 10 - 1 - i; j ++) {
            if (arr[j] > arr[j+1]) {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
                sign = 0;
            }
        }
        if (sign == 1)
            break;
    }
    for (i = 0; i < 10; i ++)
        printf("arr[%d] = %d\n", i, arr[i]);
    return 0;
}

冒泡排序有两个循环,最里面的循环的意思:

先说进行完一次内循环的效果,就是,找出了剩下所有元素中最大的,放在了最后面。

这个最大怎么找呢,就是j从0开始到10 - 1 - i,两个两个的逐渐比较,arr[j] > arr[j+1]这样,j每次加上,这样就是

一个数会比较两次,一次是在arr[j+1]的位置上,一次是在arr[j]的位置上,因为j++了。如果符合条件就互换位置。

进行一次内循环就会有一个元素找到了自己的位置,所以在进行下次循环的时候就不用再管他了,所以内层循环是10 - 1- i,

每次少一个元素,这样,就是外层那个循环的次数了,10 - 1。好比这里10个元素,为什么外层循环是9次呢?

因为你排好倒数第二个了,倒数第一个肯定就是那个位置了。

然后就是里面的sign的作用了。如果一个内循环,一次都没有交换数据,说明这个已经是排好序了,根本不用再继续了,

所以弄这么个东西了判断一下。

时间: 2024-11-02 09:39:40

冒泡算法学习记录的相关文章

算法学习记录-栈的应用--表达式运算

前面做了栈的基本操作 总感觉需要做一个实际的例子来检验一下. 这里我将用栈来做一个简单的四则运算. 目标比较简单: 做一个带小括号(“()”)的四则运算,如果要加入到中括号(“[]”)或者大括号(“{}”),依次类推. 求一个表达式: 用下面这个算是做例子,程序最后应该可以算出任何带小括号的运算. 3+(32-6)*9+5*3-(3*(65-15)/5)+12; 方法一:后缀法. 1.了解中缀和后缀表示法 中缀表示法:刚才的那个算是就是中缀表示法,我们通常看到的数学符号就是中缀表示法,即数字在计

算法学习记录-查找——平衡二叉树(AVL)

排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高.查找的最差情况是树的高度.这里就有问题了,将无序数列转化为 二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况. [如图1]: 这样的一颗二叉排序树就是一颗比较极端的情况.我们在查找时候,效率依赖树的高度,所以不希望这样极端情况出现,而是希望元素比较均匀 的分布在根节点两端. 技术参考:fun4257.com/ 问题提出: 能不能有一种方法,使得我们的二叉排序树不依赖无序序列的顺序,也能使得我们得到的二叉排序树是比

KMP算法学习记录----《大话数据结构》部分匹配表学习部分

如需转载,请保留本文链接. 首先先将<大话数据结构>关于KMP算法的讲解部分贴上,本文不提供下载链接,也不会将电子书作为资料留百度云,需要电子书的各位,请自行寻找电子版. 关于上述的KMP算法种的next数组的推导部分,一直不是很明白,本贴是关于上述部分的学习推导记录. 以书中字符串为例: 1|2|3|4|5|6|7|8|9| a|b|a|b|a|a|a|b|a| 0|1|1|2|3|4|2|2|3| string T = "ababaaaba"; int i = 1;j

【算法学习记录-排序题】【PAT A1012】The Best Rank

To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematics (Calculus or Linear Algrbra), and E - English. At the mean time, we encourage students by e

KMP算法学习记录----Jake Boxer博文学习部分

如需转载,请保留本文链接. Jake Boxer 英文博文链接:http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/ 如何使用部分匹配表 1.作用:使用部分匹配表跳过那些已经做过的,旧的比较部分,从非重复匹配部分开始. 2.if(匹配表结果大于1) { 允许跳过的字符数量 = 匹配长度 - 部分匹配表[匹配长度-1]; } else { 允许跳过的字符数量 =  部分匹配表[匹

算法学习记录

1. 时空复杂度分析: O(1).O(n).O(n^2).O(log n).O(n log n)是什么意思 传输门-比较易懂 2. 待更新... 原文地址:https://www.cnblogs.com/412013cl/p/10929806.html

【算法学习记录-排序题】【PAT A1025】PAT Ranking

Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it i

【算法学习记录-排序题】【PAT A1062】Talent and Virtue

About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about people's talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a "sage(圣人)"; being less excellent

学习记录---KMP算法-部分匹配表理解

如需转载,请保留本文链接. 看了 阮一峰 大神的字符串匹配的KMP算法后,关于部分匹配的部分并不是很理解,特意去看了阮大神文章中的英文链接,这里写下自己的理解,用作学习记录. 阮大神文章链接:https://kb.cnblogs.com/page/176818/ Jake Boxer 英文博文链接:http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/ 关于前缀和后缀的定义,这里