2012-07-30 21 views
0

我正在嘗試使用冒泡排序,在c#中從最小到最大的順序排列數字,到目前爲止我最近有什麼不對?需要幫助來創建c#bubblesort。到目前爲止我有什麼問題?

private void Order_Click(object sender, EventArgs e) { 
    value1 = Convert.ToInt32(textBox1.Text); 
    value2 = Convert.ToInt32(textBox2.Text); 
    value3 = Convert.ToInt32(textBox3.Text); 
    value4 = Convert.ToInt32(textBox4.Text); 
    value5 = Convert.ToInt32(textBox5.Text); 

    int[] myarray = { value1, value2, value3, value4, value5 }; 
    int n = 0; 
    bool swapped = true; 
    int j = 0; 
    int tmp; 
    while (swapped) { 
    swapped = false; 
    j++; 
    for (int i = 0; i < n - j; i++) 
    { 
     if (myarray[i] > myarray[i + 1]) { 
     tmp = myarray[i]; 
     myarray[i] = myarray[i + 1]; 
     myarray[i + 1] = tmp; 
     swapped = true; 
     order1.Text = Convert.ToString(myarray[0] + "," + 
             myarray[1] + "," + 
             myarray[2] + "," + 
             myarray[3] + "," + 
             myarray[4]); 
     } 
    } 
    } 
} 
+3

那麼是什麼讓你認爲什麼是* *錯呢?運行時出了什麼問題? – 2012-07-30 20:08:30

+1

我可以看到寫你自己的泡泡的唯一原因是家庭作業。這是功課嗎?如果它不具有冒泡排序功能,只需執行以下操作:var items = new List {value1,value2,value3,value4,value5}; items.Sort();' – asawyer 2012-07-30 20:08:34

+1

總是先嚐試StackOverflow,然後雅虎回答。 http://answers.yahoo.com/question/index?qid=20120730130225AAkmMs0 – 2012-07-30 20:10:47

回答

-2

冒泡排序

using System; 

class AscendingBubbleSort 
{  
    public static void Main() 
    { 
     int i = 0,j = 0,t = 0; 
     int []c=new int[20]; 
     for(i=0;i<20;i++) 
     { 
      Console.WriteLine("Enter Value p[{0}]:", i); 
      c[i]=int.Parse(Console.ReadLine()); 
     } 
     // Sorting: Bubble Sort 
     for(i=0;i<20;i++) 
     { 
      for(j=i+1;j<20;j++) 
      { 
       if(c[i]>c[j]) 
       { 
        Console.WriteLine("c[{0}]={1}, c[{2}]={3}", i, c[i], j, c[j]); 
        t=c[i]; 
        c[i]=c[j]; 
        c[j]=t; 
       } 
      } 
     } 
     Console.WriteLine("Here comes the sorted array:"); 
     // Print the contents of the sorted array 
     for(i=0;i<20;i++) 
     { 
      Console.WriteLine ("c[{0}]={1}", i, c[i]); 
     } 
    } 
} 

source

0

nj變量似乎unnessesary。離開nj你的方案,並在你的for循環,這樣做:

for (int i = 0; i < (array1.Length - 1); i++) 
1

這是你的代碼錯誤的第一件事是:

for (int i = 0; i < n - j; i++) 

你的檢查i < n - j永遠不會讓控制通過循環。因爲你已經將n初始化爲0並且j是1(在j ++之後),所以i不會小於-1,因此你的循環將無法按預期工作。由於您將交換設置爲false,因此控件將從while循環中跳出,因此無法排序。

您需要更改您的代碼:

while (swapped) 
      { 
       swapped = false; 
       for (int i = 0; i < myarray.Length - 1; i++) 
       { 
        if (myarray[i] > myarray[i + 1]) 
        { 
         int t = myarray[i]; 
         myarray[i] = myarray[i + 1]; 
         myarray[i + 1] = t; 
         swapped = true; 
         Console.WriteLine(Convert.ToString(myarray[0] + "," + myarray[1] + "," + myarray[2] + "," + myarray[3] + "," + myarray[4])); 
        } 

       } 

      } 
+0

我試過了,這個不知何故仍然不起作用,我認爲這個問題可能在陣列本身,你可以看看它,並告訴是什麼錯? – user1564002 2012-07-30 20:52:25

+0

我發現數組總是有5的值,所以循環永遠不會經過,我該如何解決? – user1564002 2012-07-30 20:56:05

+0

@ user1564002,嘗試用答案中的代碼替換while循環代碼。這是工作 – Habib 2012-07-31 03:06:41