帮忙修改一下快排

realduke2000 2013-03-06 12:55:46


昨天闲着没事温习一下qsort, 请大家帮忙改一下,这个算法有bug,debug方法给的数据不work。



import java.util.*;

public class MySort {
public static MySort getInstance()
{
if(instance==null)
{
instance = new MySort();
}

return instance;
}
private static MySort instance = null;

/*
*
*/
private int partition(int[] arr, int start, int end)
{
// TODO: argument check
int key = arr[start];
while(start<end)
{
while(arr[end]>key) end--;
while(arr[start]<key)start++;


int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;

}

return start;
}

public void QSort(int[] arr, int start, int end)
{
// TODO: argument check

if(start<end)
{
int partition = partition(arr, start, end);

QSort(arr, start, partition - 1);
QSort(arr, partition + 1, end);
}
}

public void QSortTest1()
{
int len = 10;
int arr[] = new int[len];
Random r = new Random(System.currentTimeMillis());

for(int i=0; i<len;i++)
{
arr[i] = r.nextInt(100);
}

System.out.println("Before sort:");
DisplayIntArray(arr);
QSort(arr, 0, arr.length - 1);
System.out.println("After sort:");
DisplayIntArray(arr);
}

public void QSortDebug1()
{
int arr[] = new int[]{3, 23, 82, 82, 5, 15, 13, 45, 38, 8 };

System.out.println("Before sort:");
DisplayIntArray(arr);
QSort(arr, 0, arr.length - 1);
System.out.println("After sort:");
DisplayIntArray(arr);
}

private void DisplayIntArray(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]);
System.out.print(" ");
}

System.out.println();
}
}

...全文
168 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2013-03-06
  • 打赏
  • 举报
回复
while(arr[end]>key) end--; while(arr[start]<key)start++; 这两句会越界。start越过一开始的end值的时候你就把隔壁另一个分支的QSort内容改掉了。
realduke2000 2013-03-06
  • 打赏
  • 举报
回复
数据中有相同的该程序就无法正常运行,但是我感觉我是按照快排的思想写的啊

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧