繁体   English   中英

试图让我的快速排序程序与 while 循环一起工作,遇到了麻烦

[英]trying to make my quick-sort program work with a while loop, ran into a hitch

public class qsort { public static void main(String[] args) { char[] arr = {'Q', 'U', 'I', 'C', 'K', 'S', 'O', 'R', 'T', 'E', 'X', 'A', 'M', 'P', 'L', 'E'}; System.out.println(Arrays.toString(arr)); shuffle(arr); System.out.println(Arrays.toString(arr)); System.out.println("Pivot="+arr[0]); int i; while(arr[i]<arr[j]){ for(i=1;i<arr.length;i++){ if(arr[i]>arr[0]){ System.out.println("Left="+arr[i]); break; } } for(int j=arr.length-1;j>i;j--){ if(arr[j]<=arr[0]){ System.out.println("Right="+arr[j]); exch(arr,i,j); break; } } } System.out.println(Arrays.toString(arr)); } public static void exch(char[] arr,int i, int j){ char temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } public static void shuffle(char[] arr) { Random rand = new Random(); for (int i = 0; i < arr.length; i++) { int r = rand.nextInt(arr.length); char temp = arr[i]; arr[i] = arr[r]; arr[r] = temp; } } }

据我所见,您的问题已解决

while(arr[i]<arr[j])

你没有初始化变量我只在这一行创建它

int i;

甚至没有创建变量 j 这就是为什么它无法检查 i 处的数组是否小于 j 处的数组你需要考虑 i 和 j 的值是什么并给变量这个值

所以这不是快速排序的正确算法,快速排序的复杂度为 O(nlogn),代码的复杂度为 O(n*n)。 我不确定您使用 while 循环是什么意思,您仍然可以使用 while 循环,但您需要根据 pivot 将阵列分成两部分; a[0] 在您的情况下,然后交换,这就是您的代码中缺少的代码。 在对数组进行分区时,检查分区数组是否已排序,并返回它之前和之后再次需要分区的索引。 并且你继续partiotining直到数组长度为1。所以重新审视你的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM