快速排序不会运行C#

时间:2016-04-20 03:08:10

标签: c# sorting

我需要我的QuickSort来排序十进制数而不仅仅是整数.Below是我的代码,其中文件被读取,我认为这是问题。我该如何解决这个问题?

    public static void Main()
    {
        quickSort q_Sort = new quickSort();

        string[] years = System.IO.File.ReadAllLines(@"C:\WS1_Rain.txt");
IEnumerable<int> yearArray = years.Select(item => int.Parse(item));
int[] array = yearArray.ToArray();

        q_Sort.array = array;
        q_Sort.len = q_Sort.array.Length;
        q_Sort.QuickSort();

        for (int j = 0; j < q_Sort.len; j++)
        {
            Console.WriteLine(q_Sort.array[j]);
        }
        Console.ReadKey();

3 个答案:

答案 0 :(得分:0)

在C#中,double只存储整数,floatdouble可以存储整数和浮点数。

如果你希望你的程序能够读取浮点数和整数,你应该使用decimal,或者如果你想要数字准确,你应该使用double,但我不是认为有必要这样做。我将使用sort

这基本上就是你需要做的,

  • 将数组更改为双精度数组
  • Convert.ToDouble方法的变量更改为double类型
  • 使用int.Parse代替class quickSort { private double[] array = new double[1010]; private int len; public void QuickSort() { sort(0, len - 1); } public void sort(double left, double right) { double pivot; double leftend, rightend; leftend = left; rightend = right; pivot = array[left]; while (left < right) { while ((array[right] >= pivot) && (left < right)) { right--; } if (left != right) { array[left] = array[right]; left++; } while ((array[left] <= pivot) && (left < right)) { left++; } if (left != right) { array[right] = array[left]; right--; } } array[left] = pivot; pivot = left; left = leftend; right = rightend; if (left < pivot) { sort(left, pivot - 1); } if (right > pivot) { sort(pivot + 1, right); } } public static void Main() { quickSort q_Sort = new quickSort(); string[] years = System.IO.File.ReadAllLines(@"C:\WS1_Rain.txt"); var yearArray = years.Select(item => Convert.ToDouble(item)); double[] array = yearArray.ToArray(); q_Sort.array = array; q_Sort.len = q_Sort.array.Length; q_Sort.QuickSort(); for (int j = 0; j < q_Sort.len; j++) { Console.WriteLine(q_Sort.array[j]); } Console.ReadKey(); } } }

试试吧!

如果你太懒了,这就是代码:

  Scanner in = new Scanner(System.in);

  System.out.println("Enter a string");
  s = in.nextLine();

注意:我实际上并不知道快速排序算法。

答案 1 :(得分:-1)

int表示整数不是分数

答案 2 :(得分:-1)

我没有运行这个,所以如果没有一些调整它可能无法正常工作但是当它工作时我希望你试着找出你的版本出了什么问题:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sortQuick
{
    class quickSort
    {

        private double[] array = new double[1010];
        private int len;

        public void QuickSort()
        {
            sort(0, len - 1);
        }

        public void sort(int left, int right)
        {
            int leftend, rightend;
            double pivot;

            leftend = left;
            rightend = right;
            pivot = array[left];

            while (left < right)
            {
                while ((array[right] >= pivot) && (left < right))
                {
                    right--;
                }

                if (left != right)
                {
                    array[left] = array[right];
                    left++;
                }

                while ((array[left] <= pivot) && (left < right))
                {
                    left++;
                }

                if (left != right)
                {
                    array[right] = array[left];
                    right--;
                }
            }

            left = leftend;
            right = rightend;

            if (left < pivot)
            {
                sort(left, pivot - 1);
            }

            if (right > pivot)
            {
                sort(pivot + 1, right);
            }
        }

        public static void Main()
        {
            quickSort q_Sort = new quickSort();

            double[] years = System.IO.File.ReadAllLines(@"C:\WS1_Rain.txt");
            IEnumerable<double> yearArray = years.Select(item => double.Parse(item));
            double[] array = yearArray.ToArray();

            q_Sort.array = array;
            q_Sort.len = q_Sort.array.Length;
            q_Sort.QuickSort();

            for (int j = 0; j < q_Sort.len; j++)
            {
                Console.WriteLine(q_Sort.array[j]);
            }
            Console.ReadKey();
        }
    }
}

更新:好的,您的代码很难修改我从here获取原始代码并将其修改为使用double。所以这是一个工作版本(我测试过它)。

class Program
    {
        static public int Partition(double[] numbers, int left, int right)
        {
            double pivot = numbers[left];
            while (true)
            {
                while (numbers[left] < pivot)
                    left++;

                while (numbers[right] > pivot)
                    right--;

                if (left < right)
                {
                    double temp = numbers[right];
                    numbers[right] = numbers[left];
                    numbers[left] = temp;
                }
                else
                {
                    return right;
                }
            }
        }

        static public void QuickSort_Recursive(double[] arr, int left, int right)
        {
            // For Recusrion
            if (left < right)
            {
                int pivot = Partition(arr, left, right);

                if (pivot > 1)
                    QuickSort_Recursive(arr, left, pivot - 1);

                if (pivot + 1 < right)
                    QuickSort_Recursive(arr, pivot + 1, right);
            }
        }

        static void Main(string[] args)
        {
            double[] numbers = System.IO.File.ReadAllLines(@"C:\WS1_Rain.txt").Select(p => double.Parse(p)).ToArray();
            int len = 9;

            Console.WriteLine("QuickSort By Recursive Method");
            QuickSort_Recursive(numbers, 0, len - 1);
            for (int i = 0; i < 9; i++)
                Console.WriteLine(numbers[i]);

            Console.WriteLine();
            Console.ReadKey();
        }