2 qq 34614890 qq_34614890 于 2016.05.03 11:07 提问

对数组a[0:8]=[3,2,6,5,9,4,7,1,8]进行冒泡排序,排序为什么不对

//================================================================//
//对数组a[0:8]=[3,2,6,5,9,4,7,1,8]进行冒泡排序 //
//================================================================//

int main()

{
int a[9] = { 3,2,6,5,9,4,7,1,8 };
int i,j;

for (i = 9;i>0;i--) 
{

    for (j = 0; j<9-i;j++)
    {
        if (a[j] > a[j + 1])
        {
            int temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
}
for (j=0;j<9;j++)
cout << a[j];
return 0;

}

5个回答

CSDNXIAON
CSDNXIAON   2016.05.03 11:12

循环数组问题(折半查找) {4,5,6,7,8,9,0,1,2,3}
0,1,2,3,4,5,6,7,8,9的第100万个字典排列是什么?
[1, 2, 3, 4, 5, 6, 7, 8]
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

b491985496
b491985496   2016.05.03 11:19

你没理解冒泡排序的意义,建议你把书拿过来仔细看一下这个算法的思想是什么,
大概意思是:
第一次排序,把最大的(或者最小的)放到最后一个位子上
第二次排序,最后一个位子不用参与比较了,因为刚才已经确定他是最大的了,所以循环的时候不用考虑最后一位,这次会把最大的放在倒数第二个位子上
.........
第N次只剩下一个数,然后就是一个有序序列。

稍微改了下你的代码,

 int main()

{
    int a[9] = { 3, 2, 6, 5, 9, 4, 7, 1, 8 };
    int i, j;

/*
    for (i = 9; i > 0; i--)
    {

        for (j = 0; j<9 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }*/

    for (i = 0; i < 9; i++)
    {
        for (j = 1; j < 9 - i; j ++)
        {
            if (a[j - 1] > a[j])
            {
                int iTemp = a[j - 1];
                a[j - 1] = a[j];
                a[j] = iTemp;
            }
        }
    }

    for (j = 0; j < 9; j++)
        cout << a[j]<<' '<<endl;

    system("pause");
    return 0;
}
b491985496
b491985496   2016.05.03 11:29

你写的算法大概意思是:
第一轮,【1】和【2】之间选一个最大的放在【2】位子上
第二轮,【1】、【2】、【3】之间选一个最大的放在【3】上
第三轮,...
...
例如你这个:
int a[9] = { 3, 2, 6, 5, 9, 4, 7, 1, 8 };

第一次比较3,2,结果是{2,3,...}
第二次比较3,2,6,结果是{2,3,6...}
第三次比较3,2,6,5,结果是{2,3,5,6,...}
...
最明显的在与1比较的时候,只不过简单的把1往前面进了一位而已,1并没到首位
sinat_24601593
sinat_24601593   2016.05.03 11:33

"for (j = 0; j<9-i;j++)" 改为 "for (j = 0; j<9-1;j++)"

herozhangbz
herozhangbz   2016.05.04 10:59

我感觉他们都没有真正理解冒泡排序

    int a[9]={3,2,6,5,9,4,7,1,10};
    int i,j,temp;
    for(i=0;i<9;i++)//每轮确定本轮最值
    for(j=i+1;j<9;j++)//从后面一个数字比较,比较结束a[i]为本轮最值
    {
        if(a[i]>a[j])//交换取较小值
        {
            temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
    for(i=0;i<9;i++)
        printf("%d\t",a[i]);
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
冒泡排序,选择排序,sort排序
1.首先用scanf接收n个同学,然后在键盘上输入n个同学的姓名和成绩,空格分开。 然后输入1 2 3 序号分别选择三种排序方式,回车结束。程序会自动根据你选择的排序方式进行排序。 2.首先用scanf接收有几个数字,然后输入n个无序的数。调用快速排序函数,得出结果。 #include #include using namespace std; struct student { cha
数组冒泡排序原理
此篇以该数组为例 var array = [8,7,9,2,3,5,6,1];数组冒泡循环原理:相邻的两位数做比较,1和2比较 2和3比较 3和4比较 4和5比较,这样依次比较,如果前面的数小于后面的数,不做操作,如果前面的数大于后面的数则调换两个数字的位置,,列1>2 则数字顺序为2 1(注:此时的1 2 3 4 5代表索引而不是数组),所以一层循环能挑出一个当前数组参与比较数字中的最大的数字,并
给数组用冒泡排序 int[] arr = {3,4,11,16,8,1,9,10};
//我也是新手,说一下新手分享,做多层嵌套,我习惯从里层开始网外层写,这样自己容易明白public class demo13 { public static void main(String[] args) { int[] arr = {3,4,11,16,8,1,9,10}; maopao(arr); for(int i=0;i&amp;lt;arr.length;i++){ System.o...
关于数组的排序问题(冒泡排序,选择排序,插入排序)
方法一:冒泡排序法 代码: public int[] bubbleSort(int[] a){ //冒泡排序算法 //每趟不断将相邻记录两两比较,并按“前小后大”(或“前大后小”)规则交换。 int len = a.length; for(int i = len-1;i>=1;i--){ for(int j = 0;j<=i
java学习3-冒泡排序对数组进行排序
原理:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 public class SelectSort { public static void main(String[] args) { int[] arr1={14,16,9,25,18,63,45,30}; selectS
【算法】冒泡排序(从小到大) 排序范围(0~n-1)n为数组元素个数
今天要谈的是基本排序算法中的冒泡排序。除了冒泡排序,基本排序算法还包括:选择排序、插入排序。   插入排序算法的思想也是很简单的,它把排序过程模拟成了从水底冒气泡的过程。一趟排序过程结束后,最小(最轻)的元素就已经“浮”到水面上了。接下来就是不断缩小排序范围,把每个排序范围中最小的元素交换到数组头。   接下来就来分析算法,我们使用的数据是1 3 2 8 0 6 共6个元素      我们
冒泡排序实现整数数组的排序
冒泡排序:是一种从后往前的排序方法,比较相邻的两个数,如果第一个比第二个大就交换它们,依次往下比较,一趟下来就确定了最后的的元素(该数组的最大数)。若该数组有n个元素,需进行n-1趟排序,第i趟比较的次数为n-i次。 eg:5 4 3 2 1 //5个元素      4 3 2 1 5 //第一趟      3 2 1 4 5 //第二趟      2 1 3 4 5 //第三趟
一维数组的冒泡排序
#include <stdio.h> //冒泡排序 int main(void){ int nums[] = {23,14,76,53,29}; int LEN = sizeof(nums)/ sizeof(int); printf("数组长度获取: %d\n",sizeof(nums)/sizeof(int)); printf("排序前的数组是: "); for
用C#实现对数组元素排序(冒泡法)
昨天学习了如何用Split方法对数组进行处理,还学习了如何用Array.Sort()方法对数组进行排序,今天来研究下冒泡算法 冒泡算法(Bubble Sort)先画表来说明下: 比如说,我们有个八位的int型数列,int[8] intArray=(8,7,6,5,4,3,2,1);那么,假设它开始在内存中是这样的 序号:0、1、2、3、4、5、6、7 值值:8、7、6、5、4、3、
C语言冒泡排序将一个数组按照从小到大进行排序
例如 int a[10] = {0,5,2,3,6,9,8,7,4,1} 对其10个整数由小到大进行排序 思想:冒泡排序 实现一: #include&amp;lt;stdio.h&amp;gt; int main() { int i = 0; int a[10] = {0,5,2,3,6,9,8,7,4,1}; int j = 0; int tmp = 0; ...