我用C#做了一个快速排序算法,当数组中只有10个项时,它可以工作。当我增加这个数字时,它就会陷入无限循环。这是问题所在的代码:
while (true)
{
while (((IComparable)arrayToSort[left]).CompareTo(pivot) < 0)
{
left++;
}
while (((IComparable)arrayToSort[right]).CompareTo(pivot) > 0)
{
right--;
}
if (left < right) //This is where the loop becomes infinite.
{
object temp =arrayToSort[right];
arrayToSort[right] = arrayToSort[left];
arrayToSort[left] = temp;
reDrawer.reDrawSample(right, g, arrayToSort, picSamples); //This is used to draw lines that are sorted to make the sorting visual.
reDrawer.reDrawSample(left, g, arrayToSort, picSamples);
refresher.refreshPicture(picSamples); //This is used to refresh the image with the lines.
Thread.Sleep(20);
}
else
{
return right;
}
class Quick_Sort
{
/// <summary>
/// This subroutine creates a pivot and partitions the array accordingly.
/// </summary>
/// <param name="arrayToSort"></param>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public int partition(ArrayList arrayToSort, int left, int right)
{
int pivot = (int)arrayToSort[left];
ReDrawer reDrawer = new ReDrawer();
Refresher refresher = new Refresher();
while (true)
{
while (((IComparable)arrayToSort[left]).CompareTo(pivot) < 0)
{
left++;
}
while (((IComparable)arrayToSort[right]).CompareTo(pivot) > 0)
{
right--;
}
if (left < right)
{
object temp =arrayToSort[right];
arrayToSort[right] = arrayToSort[left];
arrayToSort[left] = temp;
reDrawer.reDrawSample(right, g, arrayToSort, picSamples);
reDrawer.reDrawSample(left, g, arrayToSort, picSamples);
refresher.refreshPicture(picSamples);
Thread.Sleep(speed);
}
else
{
return right;
}
}
}
/// <summary>
/// This recursive subroutine is responsible for sorting the array into the correct order after the individual partitions have been ordered.
/// </summary>
/// <param name="arr"></param>
/// <param name="left"></param>
/// <param name="right"></param>
public void sortArray(ArrayList arr, int left, int right)
{
if (left < right)
{
int pivot = partition(arr, left, right);
if (pivot > 1)
{
sortArray(arr, left, pivot - 1);
}
if (pivot + 1 < right)
{
sortArray(arr, pivot + 1, right);
}
}
}
}
当调用sortArray时,left=0,right=49&array是一个随机的50个元素的一维数组。
您可以忽略对reDrawer和refresher的引用,因为这些不会影响排序算法,它们只会在图片框中绘制结果。
当right==pivot或left==pivot时发生。
你是对的,在这种情况下,你在左/右停下来。您需要在每次迭代中至少输入/减少这两个变量一次。
public int partition(ArrayList arrayToSort, int left, int right)
{
int pivot = (int)arrayToSort[left];
left--;
right++; //To prevent the first iteration from ignoring the outermost elements
ReDrawer reDrawer = new ReDrawer();
Refresher refresher = new Refresher();
while (true)
{
do
{
left++;
}while (((IComparable)arrayToSort[left]).CompareTo(pivot) < 0);
do
{
right--;
}while (((IComparable)arrayToSort[right]).CompareTo(pivot) > 0);
if (left < right)
{
object temp =arrayToSort[right];
arrayToSort[right] = arrayToSort[left];
arrayToSort[left] = temp;
reDrawer.reDrawSample(right, g, arrayToSort, picSamples);
reDrawer.reDrawSample(left, g, arrayToSort, picSamples);
refresher.refreshPicture(picSamples);
Thread.Sleep(speed);
}
else
{
return right;
}
}
}
主要内容:Eclipse 快速修复Eclipse 快速修复 当您在 Eclipse 编辑器中键入字符时,它会分析文档内容中是否存在潜在的错误和警告。java 编辑器使用 java 语法来检测代码中的错误。当它发现错误或警告时: 使用红色波浪线突出显示错误。 使用黄色波浪线突出显示警告。 显示错误和警告问题 向垂直标尺添加带有警告标志或错误标志的灯泡。 快速修复对话框提供了可能更正的列表。可以通过以下方式调用快速修复对话框 将鼠标
使用快速修复 在 Eclipse 编辑器中当你输入字母时,编辑器会对你输入的内容进行错误分析。 Java 编辑器中使用 Java 语法来检测代码中的错误。当它发现错误或警告时: 使用红色波浪线突出错误 使用黄色的波浪线突出警告 在 Problem 视图中显示错误和警告 在垂直标尺上显示黄色小灯泡及警告和错误标识 快速修复的对话框提供了解决的方案。快速修复对话框可通过以下方式调用: 将鼠标指针放在波
使用Quix修复 当您在eclipse编辑器中键入字符时,它会分析文档内容以查找潜在的错误和警告。 java编辑器使用java语法来检测代码中的错误。 当它发现错误或警告时,它 - 使用红色波浪线突出错误。 使用黄色波浪线突出警告。 显示错误和警告 问题视图。 添加带有警告标志或错误标志的灯泡到垂直标尺。 快速修复对话框提供了可能的更正列表。 可以通过以下方式调用快速修复对话框: 将鼠标指针放在波
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两
1. 前言 本节内容是排序算法系列之一:快速排序,主要讲解了快速排序的主体思路,选取了一个待排序的数字列表对快速排序算法进行了演示,给出了快速排序算法的 Java 代码实现,帮助大家可以更好地理解快速排序算法。 2. 什么是快速排序? 快速排序(Quick Sort),是计算机科学与技术领域中非常经典的一种排序算法,应用分治思想进行排序。 快速排序由于其时间复杂度优于大部分的排序算法,因而命名为快
代码:import functools import json import os import tensorflow as tf import sys。路径附加(“C:\Users\Gilbertchristian\Documents\Anaconda\Object\u detection\u api\models\research”)系统。路径附加(“C:\Users\Gilbertchris