黑马程序员技术交流社区
标题:
关于排序问题
[打印本页]
作者:
帅气的冬瓜
时间:
2013-10-31 11:56
标题:
关于排序问题
今天复习发现前后所记笔记,有所不同,瞬间懵懂 思路最重要呀 求解
选择排序:问题所在 两个for语句
void selectArr(int[] arr)
{
for (int x=0;x<arr.length;x++) //另一种写法:for (int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length-1;x++) // for(int y=x+1;y=arr.length;x++)
{if (arr[x]>arr[y])
swap(arr,x,y);
}
}
}
这个我是这样理解的 ,这两种写法是一样,只要保证最后一个比较就行。不知理解是否正确。
选择排序:问题所在 两个for语句
void bubleSort(int[] arr)
{
for (int x=0;x<arr.length;x++) //另一种写法:for (int x=0;x<arr.length-1;x++)
{
for(int y=0;x<arr.length-x-1;y++) // for(int y=0;y=arr.length-x-1;x++)
{
if (arr[x]>arr[y+1])
swap(arr,y,y+1);
}
}
}
关键是这个,不知道是否是笔记记错,就是转不过弯来了,崩溃。还是请教一下记得牢。
作者:
Gump
时间:
2013-10-31 12:25
本帖最后由 Gump 于 2013-10-31 12:32 编辑
帮你改正一下选择排序:
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for(int y=x+1;y<arr.length;y++)
{
if (arr[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
冒泡排序:
public static void bubbleSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for (int y=0; y<arr.length-x-1; y++) //让每一次比较的元素减少,-1:避免角标越界。
{
if (arr[y]>arr[y+1])
{
int temp =arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
//swap(arr,y,y+1); 这个是下面定义的一个函数
}
}
}
}
建议:初学还是先记住一种较为好理解的方法比较好,多练习,其他的方法以后接触到自然就懂了。
作者:
魏春旭
时间:
2013-10-31 13:05
我好像没太懂楼主的意思。
不过你的第一种方法是选择排序,注释部分所谓的另一种方法才是正确的。注释之前的代码会出现数组角标越界。
下边的一种方法是冒泡法排序,同样,你注释掉的才是正确的,前边的代码同样会角标越界。
建议楼主看视频的同时多加练习,共同努力。
作者:
The_Wizard
时间:
2013-11-1 11:34
为什么不用这种排序方式呢?我感觉这种比选择或者冒泡好多了。另外问下,下面这种排序叫什么名字啊?
public static void selectSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
int index = x;
for (int y = x + 1; y < arr.length; y++) {
if (arr[index] > arr[y]) {
index = y;
}
}
if(index != x) {
int temp = arr[index];
arr[index] = arr[x];
arr[x] = temp;
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2