2016-04-20 8 views
-1

クイックソートでは、数字だけでなく10進数もソートする必要があります。下はファイルが読み込まれる場所のコードですが、これは問題だと思います。どのように私はこれを修正するのですか?クイックソートが実行されないC#

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(); 
+2

組み込み_Array.Sort_を使用できますか?あなたのソートを書く理由がありますか? –

+0

どのような種類のエラーが発生しているのか、また何番の入力にいくつのサンプル入力があるのか​​、(あなたの質問で)記述できますか?たとえば、11.5,12.2、および13.3と指定した場合、どのように並べ替えるのですか?それはコミュニティがあなたの問題を見つけるのに役立ちます。 –

+0

「これ以上実行できませんか?それはちょうど拒否する?それとも、例外やコンパイラのエラーを出すのですか?後者の場合は、そのエラーを投稿してください。 –

答えて

-1

int整数整数C#のない画分

+0

データ型を 'float'に変更します。private float [] array = new float [1010]; – Gubr

+0

整数を保持するすべての変数を変更する必要があります:public void sort(float left、float right) { float pivot、leftend、rightend; – Gubr

+0

@Jermaneeeeeこれは正解です。あなたが宿題であることを述べて以来、私はあなたが努力し続けるのが最良だと感じています。 Visual Studioを使用してC#を実行している場合[デバッグは役に立ちます](http://www.bing.com/videos/search?q = visual + studio +デバッグ&& view = detail&mid = B82F313916C43518B4C7B82F313916C43518B4C7&FORM = VRDGAR)エラーが発生している正確な行を探します。 – JabberwockyDecompiler

0

int格納整数のみを意味し、doubleまたはfloatは整数と浮動小数点数の両方を記憶することができます。

プログラムで浮動小数点数と整数の両方を読み取れるようにするには、数値を正確にする場合はdouble、さらにはdecimalを使用する必要がありますが、その必要性はないと思います。私はsort方法の変数はdouble型のものであるとdoubleの配列

  • 変化に、これはあなたが何をする必要があるか基本的にdouble

    • 変更の配列を使用します
    • int.Parseの代わりにConvert.ToDoubleを使用してください。

    お試しください!


    あなたは怠惰であれば、ここでのコードは次のとおりです。

    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(); 
        } 
        } 
    } 
    

    注:私は実際にはクイックソートアルゴリズムを知りません。

  • -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(); 
         } 
        } 
    } 
    

    UPDATE:[OK]をあなたのコードは変更するのが難しく、私は元のコードを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(); 
         } 
    
    +0

    @Jermaneeeeeあなたの番です。 – Gubr

    +0

    私はテキストファイルで試してみましたが、うまくいきました。その行を置き換えてください:double [] numbers = System.IO.File.ReadAllLines(@ "C:\ WS1_Rain.txt")。 .Parse(p))。ToArray(); – Gubr

    関連する問題