排序的奇怪现象

如程序:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int a[]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
    int i,j;
    int len = sizeof(a)/sizeof(int);
    cout<<len<<endl;
    int tmp = 0;
    int k=0;
    int flag = 0;
    for(i =0; i<len; i++)
    {
            for(j=0;j<len-i;j++)
            {
                    if(a[j]>a[j+1])
                    {
                            tmp = a[j];
                            a[j]=a[j+1];
                            a[j+1]=tmp;
                            k++;
                            flag =1;
                    }
            }
            if(flag == 0)
            break;
    }
        for(i=0;i<len;i++)
        {
                cout<<a[i]<<endl;
        }
        cout<<"k="<<k<<endl;
}

此时输出:

16
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
k=120

------------------
(program exited with code: 0)
Press return to continue

从结果看,排序正确,将数组扩容以后:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int a[]={16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
    int i,j;
    int len = sizeof(a)/sizeof(int);
    cout<<len<<endl;
    int tmp = 0;
    int k=0;
    int flag = 0;
    for(i =0; i<len; i++)
    {
            for(j=0;j<len-i;j++)
            {
                    if(a[j]>a[j+1])
                    {
                            tmp = a[j];
                            a[j]=a[j+1];
                            a[j+1]=tmp;
                            k++;
                            flag =1;
                    }
            }
            if(flag == 0)
            break;
    }
        for(i=0;i<len;i++)
        {
                cout<<a[i]<<endl;
        }
        cout<<"k="<<k<<endl;
}

此时输出结果为:

17
-1217944636
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
k=153

------------------
(program exited with code: 0)
Press return to continue

单击展开

发现新加入的16不见了,而出来一个奇怪的负数,我已经无法理解这种现象了。

时间: 2024-11-08 20:17:47

排序的奇怪现象的相关文章

Python中有关赋值的奇怪现象

下面看两个例子: 1) 2) 看到区别了吧~~ 在第1)个例子中a的值改变不影响b的值:而在2)例子中L1的值改变了会影响L2的值. 其实并不难理解,再看第3)个例子: 小结:如果是对整个变量重新赋值,则这个变量指向原来数值的指针会断掉,转而指向新的值:而如果只是对变量里面的一部分重新赋值(改变),则只不会断掉指针,这时改变的就是内存中的数值,其他指向这个数值的输出结果也会改变. Python中有关赋值的奇怪现象,布布扣,bubuko.com

ESXI上的新建虚机绑定已使用过的静态ip无法ping通网关的奇怪现象

今儿删除掉一台虚拟机并重建后继续使用其旧的ip作为静态ip,出现无法ping通网关的现象(而换其他的ip就没问题): 开始想是不是网卡有问题?更换了,还是一如既往的不行! 百度半天,捣鼓半天还是没解决,本想那就换新ip算了不用旧ip了!但一想这问题不解决, 如鲠在喉,不吐不快!! 思量许久,突然想起之前使用此ip的虚机是不是做过arp绑定,怀疑是arp的问题! ESXI上的交换机是没有做任何设置的,那应该就是esxi外的路由器arp静态绑定的问题了! 赶紧登陆路由器查看,果然这里已经做了arp绑

发现个delphi调用vc写的Dll中包含pchar参数报错奇怪现象

发现个delphi调用vc写的Dll中包含pchar参数奇怪现象 procedure中的第一行语句不能直接调用DLL的函数,否则会运行错,在之前任意加上条语句就不报错了奇怪! vc的DLL源码地址 http://blog.csdn.net/lqena/article/details/46357165 Delphi源码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Co

以隐含特征码等词汇来勉强解释这种奇怪现象

说起杀毒软件的基础,有些朋友可能觉得不屑于股,但正是这看似简单的杀毒软件原理中,却蕴含着解开谜团的钥匙.我们知道,一个杀毒软件的复杂程度要远远超过病毒与木马,理所当然其原理也比较复杂.一般情况下,一个杀毒软件是由扫描器.病毒库与虚拟机组成,扫描器是杀毒软件的核心,用于发现病毒,然而杀毒软件并不是只存在这一个扫描器!大多数软件都是若干个扫描器(或扫描算法)的结合体,虽然杀毒软件的基本思想就是特征码匹配,但是很不幸,其实现在大多数的杀毒软件都已经拥有了自己独特的扫描器.特征码扫描技术只是第一代扫描技

关于系统动画执行重叠时产生的一些奇怪现象

当系统动画的执行时间相撞时会产生一些奇怪的现象,比如说两个界面同时push到另一个界面,push的动画时间产生了重叠,这时候导航栏的控件会重叠且崩溃. 再一个就是,当界面push的动画,和下一个界面alertView show的动画时间相撞,如果这时前一个界面的导航栏上添加了一个segmentControl控件,那么在两个动画相撞时,segmentControl的填充颜色会发生变化,我看到的是变成灰色,当再次点击segmentControl上的按钮时,填充色变正常.此时不会产生崩溃.

CSS Float浮动所带来的奇怪现象

先抛个例子出来 运行下面的例子后,可以看到输出内容如下. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> div{ width: 100px; height: 100px; background-color: red; font-size: 5

table标签里插入form标签的奇怪现象

最近帮朋友处理它的表单无法提交的问题,弄了些时间,发现了一个奇怪的问题 <table> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="text" name="t" /> <input type="submit" value=&

SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?

物料号:1301002696 工厂代码:2160 MB5B,如下查询条件, 查询结果中,期初与期末库存数量都是0,期间的出库入库数量都是0.事实上该物料期初应该是有库存的.并且我用MB51相同时间段查询结果, 明明这期间有一笔货物移动,为什么MB5B里不认?初看这个结果,笔者觉得好奇怪.以严谨著称的SAP系统,不可能出这种低级错误的.现在出现这个奇怪结果,引起了我的好奇心. 经查,这笔货物移动是移动类型Z24 加特殊移动标记B, 在MB5B里换一种查询方法,查特殊库存B,如下图示: 报表结果里,

C# MemoryStream先写后读的奇怪现象

static void Main(string[] args) { MemoryStream ms = new MemoryStream(); BinaryWriter bw = new BinaryWriter(ms); int ix0 = 0x12341314;//注意 int ix1 = 2; bw.Write(ix0); bw.Write(ix1); //bw.Flush(); //bw.Close(); byte[] bes = ms.GetBuffer(); Console.Writ