黑马程序员技术交流社区
标题:
求解惑!!!
[打印本页]
作者:
潘龙旺
时间:
2013-6-26 23:09
标题:
求解惑!!!
static void Sort(int[] array)
{
int length = array.Length;
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
里面的for循环的j < length - 1 - i中的length - 1 - i是什么意思,请解释一下?
作者:
孤独客
时间:
2013-6-26 23:41
每次内循环需要多少次比较大小,才能找出其中的最大值。如:数组array中有10个数,外层循环是总的循环次数,内层循环是找出剩下的数中最大数,比如数组array[6]={2,3,5,7,8,9},你需要循环6次才能排好序,二内层循环是每次需比较的次数,如:array[0]需要和剩下的5个数作比较,array[1]需要和剩下的4个数比较,一次类推,所以用了length-1-i。
作者:
逆_水_寒
时间:
2013-6-27 01:41
不管比大还是比小,六个数比较五次即可,就像六个数之间有五个加号就能求和一样。用第一个数和第二,第三,第四,第五,第六个数各比一次,,需要五次。确定一个最值放到最前或者最后,再用第二个数和第三,第四,第五,第六,个数互比,只需比较四次。又确定其中一个最值。如此比较,需要五次大循环比,小循环比会依次减少比较次数。
作者:
彭家贰小姐
时间:
2013-6-27 08:38
楼主这个是冒泡排序法
数组arr
5
1
6
4
2
8
9
0 1 2 3 4 5 6
相邻的两个元素进行比较,如果符合条件就换位...
①arr[0]与arr[1]比较如果arr[0]>arr[1]则交换位置
②arr[1]与arr[2]比较如果arr[1]>arr[2]则交换位置
③arr[2]与arr[3]比较如果arr[2]>arr[3]则交换位置
④arr[3]与arr[4]比较如果arr[3]>arr[4]则交换位置
⑤arr[4]与arr[5]比较如果arr[4]>arr[5]则交换位置
⑥arr[5]与arr[6]比较如果arr[5]>arr[6]则交换位置
第一圈下来后,最大值出现在最后位
然后 省去最后一位的比较
5
1
6
4
2
8
0 1 2 3 4 5
......
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x-1;y++) //
-x 是为了让每一次比较的元素减少 -1避免脚标越界
{
if(arr[y]>arr[y+1])
{
int temp=arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
作者:
关关雎鸠
时间:
2013-6-28 09:24
这是冒泡排序,你先要理解冒泡排序的算法啊!
首先把第一个元素与第二个元素进行比较(如果第一个大交换),那么这时候是这样的1, 3, 9, -10, 8, 0;接着再把第二个元素与第三个进行比较,这时候
1, 3, 9, -10, 8, 0(元素的位置并没有变);接着多次比较,最后9跑到最后了1, 3, -10, 8, 0, 9。
但是,这还没完要接着第二趟进行比较:……
int[] arr = new int[] {3, 1, 9, -10, 8, 0};
外层循环是控制趟数,内层循环是控制比较的次数。每一趟完后,最大数就往后排,因此内层循环比较的次数应该要减少(没必要再比较后面的了)。那么仔细观察,这个次数与x刚好相反(x增加,次数就减少)。
作者:
吕柳根
时间:
2013-6-28 12:32
int[] numbers={9,8,7,6,5,4,3,2,1,0}; 改成升序排列 0 1 2 3 4 5 6 7 8 9 4 5 6 78 9 89 45 2 1
第一趟 8 7 6 5 4 3 2 1 0 9 第一趟比较了9次 i=0 j=9 numbers.Length-1;
第二趟 7 6 5 4 3 2 1 0 8 9 第二趟比较了8次 i=1 j=8 numbers.Length-1-1;
第三趟 6 5 4 3 2 1 0 7 8 9 第三趟比较了7次 i=2 j=7 numbers.Length-1-2;
第四趟 5 4 3 2 1 0 6 7 8 9 第四趟比较了6次 i=3 j=6 numbers.Length-1-3
第五趟 4 3 2 1 0 5 6 7 8 9 第五趟比较了5次 i=4 j=5
第六趟 3 2 1 0 4 5 6 7 8 9 第六趟比较了4次 i=5 j=4
第七趟 2 1 0 3 4 5 6 7 8 9 第七趟比较了3次 i=6 j=3
第八趟 1 0 2 3 4 5 6 7 8 9 第八趟比较了2次 i=7 j=2
第九趟 0 1 2 3 4 5 6 7 8 9 第九趟比较了1次 i=8 j=1
for(int i=0;i<number.Length-1;i++)
{
for(int j=0;j<numbers.Length-1-i;j++)
{
if(numbers[j]>numbers[j+1])
{
int temp=numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=temp;
}
}
}
讲得详细吧,多给点技术分吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2