问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){int[]elments=newint[5];//声明长度为5的数组intindex;//计数器变量inttemp;//临时变量Console.WriteLine("输入要排序的5个值");//for循环接受用户输入的值for(index=0;index<elments.Length;index++){elments[index]=int.Parse(Console.ReadLine());}Console.WriteLine("n已排序的数组");//嵌套for循环对值进行比较for(index=0;index<elments.Length;index++){for(intj=index+1;j<elments.Length;j++)-------------这一句话是啥意思???{//如果不以升序排列,就教换这些值if(elments[index]>elments[j]){temp=elments[index];elments[index]=elments[j];elments[j]=temp;}}Console.WriteLine(elments[index]);}}}}
解决方案
解决方案二:
这个应该是冒泡排序,你仔细想一下,应该能明白的......
解决方案三:
引用1楼duanfengo7的回复:
这个应该是冒泡排序,你仔细想一下,应该能明白的......
同意
解决方案四:
这个有点意思。
解决方案五:
for(intj=index+1;j<elments.Length;j++)-------------这一句话是啥意思???j从index指向的下一个数开始,遍历到最后一个,分别和index指向的数比较,如果elments[index]>elments[j])就交换,是升序排列!
解决方案六:
不难吧?好发好分析一下;
解决方案七:
冒泡排序,看看数据结构for(intj=index+1;j<elments.Length;j++)比较当前位置元素是否大于后面元素实现数据交换也可用for(intj=0;j<elments.Length-1-i;j++)还可双向排序
解决方案八:
标准的冒泡法排序啊?里面的for起点为index+1主要是让前面已经排好序的不再参与计算了,因为前面的已经计算过了,所以每次计算的时候都以当前要排序的位置向后计算,以减少无用的计算量。C语言的基础教程里有讲冒泡法排序的例子。
解决方案九:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceText{classProgram{staticvoidMain(string[]args){int[]count=newint[5];//需要排序的数组inti,j;//循环变量inttemp;//临时变量//读入数组Console.WriteLine("请输入5个数:");for(i=0;i<5;i++){Console.WriteLine("输入第{0}个数:",i+1);count[i]=int.Parse(Console.ReadLine());//类型转换}//开始排序-----------冒泡排序for(i=0;i<count.Length-1;i++)//控制比较多少轮{//将最大的元素交换到最后for(j=0;j<count.Length-1-i;j++){if(count[j]>count[j+1]){//交换元素temp=count[j];count[j]=count[j+1];count[j+1]=temp;}}}//排序后输出Console.WriteLine("排序后:");for(i=0;i<count.Length;i++){Console.WriteLine("{0}t",count[i]);}Console.ReadLine();}}}
解决方案十:
楼主的代码是用二重循环实现的冒泡排序算法:大原则是依次比较相邻的两个数,将小数放在前面,大数放在后面。这个例子中,假定输入的五个值是:81543比较过程如下:18543 (经过:8:11:51:41:3四轮比较,结果第1 位1最小)158431485313854 (经过:8:55:44:3三轮比较,第2位3最小)1358413485 (经过:8:55:4 二轮比较,第3位 4最小)13458(经过:8:5)一轮比较 第4位 5最小即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第1个数和第3个数,将小数放前,大数放后,如此继续。重复以上过程,从第2个数开始,如此下去,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复5次,内循环依次重复4,3,2,1次。for(intj=index+1;j<elments.Length;j++) 这句就是内循环体.intj=index+1 表示 从外循环的下一个无素开始,分别与index位的值比较,找出外循环(index)位置的最小值,至到最后一位.这样:内循环执行一周,就能比较出外循环的一位最小数了。
解决方案十一:
一个for用于循环次数,另一个用于循环个数,必须小于数组的上界!就是冒泡法么!
解决方案十二:
@laoas,@lzsh0622楼主的算法不是冒泡排序,虽然有点类似,也很普通,冒泡是两个相邻的元素之间的比较和交换,而楼主的算法不是,你们会把它弄晕的,@yuanmanguo已经说的很清楚了
解决方案十三:
冒泡升序排列
解决方案十四:
引用11楼youzelin的回复:
@laoas,@lzsh0622楼主的算法不是冒泡排序,虽然有点类似,也很普通,冒泡是两个相邻的元素之间的比较和交换,而楼主的算法不是,你们会把它弄晕的,@yuanmanguo已经说的很清楚了
?楼主的算法不是冒泡排序???请11楼贴出冒泡排序算法来,让大家学习一下。
解决方案十五:
总之呢,这就是对该数组的一个升序排列了
解决方案:
看来大笨狼的建议是非常好的。PS:楼主学过C语言没?
解决方案:
看这个帖子里大笨狼的回复http://topic.csdn.net/u/20090805/16/1c97b67f-9767-4ebf-a074-20aeb16a665a.html?92862
解决方案:
只是讨论楼主的程序结构而已,实际开发过程中,排序有现成的方法。
解决方案:
冒泡冒泡~
解决方案:
就是在循环里面再执行一次循环。循环索引j从index+1到elments.Length-1
解决方案:
不过排序现在不用这么费劲,使用方法Array.Sort(array)就可做到了。int[]it={3,4,99,1,5,2};for(inti=0;i<it.Length;i++){Console.WriteLine("第{0}个数为{1}",i,it[i]);}Console.WriteLine("排序后为:");Array.Sort(it);for(inti=0;i<it.Length;i++){Console.WriteLine("第{0}个数为{1}",i,it[i]);}
-------------------------------------------OUTPUT:第0个数为3第1个数为4第2个数为99第3个数为1第4个数为5第5个数为2排序后为:第0个数为1第1个数为2第2个数为3第3个数为4第4个数为5第5个数为99
解决方案:
还是最后这个简单,但是这个简单是简单。算不算是冒泡了呢。。。
解决方案:
比較的次數例如你的5個數:第一次的時候需要比較4次;第二次的時候需要比較3次;依此類推。
解决方案:
引用9楼lzsh0622的回复:
楼主的代码是用二重循环实现的冒泡排序算法:大原则是依次比较相邻的两个数,将小数放在前面,大数放在后面。这个例子中,假定输入的五个值是:81543比较过程如下:18543 (经过:8:11:51:41:3四轮比较,结果第1 位1最小)15843148531385……
给力,这样解释别人容易理解
解决方案:
en灰常好理解
解决方案:
大家学学数据结构,很明显是“选择排序”,每次选择最小/最大的一个数放到上一次计算结果的后面。
解决方案:
for(index=0;index<elments.Length;index++)//从第一个元素开始遍历{for(intj=index+1;j<elments.Length;j++){//从当前元素的下一个开始遍历,找到较小值,并且与当前值交换if(elments[index]>elments[j]){temp=elments[index];elments[index]=elments[j];elments[j]=temp;}}
这种算法效率不高,是很简单的排序算法
解决方案:
为什么现在学C#的人都不学C语言了...楼住的排序是最慢的,建议直接用array.sort
解决方案:
晕,为啥呢?明明是选择排序,都说是冒泡排序。。。
解决方案:
额,也不是。。。好像,都不是。。。