C# 气泡排序在3次输入后反转整个列表

C# 气泡排序在3次输入后反转整个列表,c#,bubble-sort,C#,Bubble Sort,因此,我试图按字母顺序对添加到数组中的书籍列表进行排序,但是,每当我输入第三本书时,列表就会翻转,并按非字母顺序对列表进行排序 如果有人知道这是为什么,请评论,让我知道,我的代码如下 用于确定是否需要交换两个索引的排序 private void bookSort() { 对于(int y=0;ystring.Compare(x.GStitle,y.GStitle,StringComparison.InvariantCulture)); //书店(书籍); 控制台。WriteLine(“排序后”)

因此,我试图按字母顺序对添加到数组中的书籍列表进行排序,但是,每当我输入第三本书时,列表就会翻转,并按非字母顺序对列表进行排序

如果有人知道这是为什么,请评论,让我知道,我的代码如下

用于确定是否需要交换两个索引的排序

private void bookSort()
{
对于(int y=0;y<20;y++)
{
对于(intx=0;x0)
{
bookSwapRoutine(books[x]);
}
}
}
}
互换本身

private void bookSwapRoutine(书本,int x=0)
{
string tempString=books[x].GStitle;
图书[x].GStitle=图书[x+1].GStitle;
图书[x+1].GStitle=tempString;
int tempInt=books[x].GSisbn;
图书[x].GSisbn=图书[x+1].GSisbn;
图书[x+1].GSisbn=tempInt;
tempString=books[x].GSauthor;
图书[x].GSauthor=books[x+1].GSauthor;
books[x+1].GSauthor=tempString;
tempString=books[x].GSpublisher;
图书[x].GSpublisher=books[x+1].GSpublisher;
图书[x+1].GSpublisher=tempString;
double tempDouble=图书[x].GSprice;
图书[x].GSprice=books[x+1].GSprice;
图书[x+1].GSprice=tempDouble;
tempString=books[x].GSdate;
图书[x].GSdate=图书[x+1].GSdate;
图书[x+1].GSdate=tempString;
}

因为这个地方。由于默认参数x=0,该函数调用始终在零索引和第一索引处交换书籍

bookSwapRoutine(books[x]);
你应该这样称呼它

bookSwapRoutine(books[x], x);
这将为您交换图书[x]和图书[x+1]

如果你想把你的书按字母顺序分类,你可以打电话

Array.Sort(books, (x, y) => string.Compare(x.GStitle, y.GStitle, StringComparison.InvariantCulture));
这里的所有代码,正确的冒泡排序,如果它能帮助你

public static void Main()
{
    var books = new Book[]
    {
        new Book() {GStitle = "E"},
        new Book() {GStitle = "D"},
        new Book() {GStitle = "C"},
        new Book() {GStitle = "B"},
        new Book() {GStitle = "A"}
    };

    Console.WriteLine("Before sort.");
    foreach (var book in books)
    {
        Console.WriteLine(book.GStitle);
    }

    Array.Sort(books, (x, y) => string.Compare(x.GStitle, y.GStitle, StringComparison.InvariantCulture));
    //BookSort(books);

    Console.WriteLine("After sort.");
    foreach (var book in books)
    {
        Console.WriteLine(book.GStitle);
    }
}

public class Book
{
    public string GStitle { get; set; }
}

public static void BookSort(Book[] books)
{
    for (int y = 0; y < books.Length; y++)
    {
        for (int x = 0; x < books.Length - 1 - y; x++)
        {
            if (string.Compare(books[x].GStitle, books[x + 1].GStitle, StringComparison.InvariantCulture) > 0)
            {
                var temp = books[x];
                books[x] = books[x + 1];
                books[x + 1] = temp;
            }
        }
    }
}
publicstaticvoidmain()
{
var books=新书[]
{
新书(){GStitle=“E”},
新书(){GStitle=“D”},
新书(){GStitle=“C”},
新书(){GStitle=“B”},
新书(){GStitle=“A”}
};
控制台。WriteLine(“排序前”);
foreach(账簿中的var账簿)
{
Console.WriteLine(book.GStitle);
}
Sort(books,(x,y)=>string.Compare(x.GStitle,y.GStitle,StringComparison.InvariantCulture));
//书店(书籍);
控制台。WriteLine(“排序后”);
foreach(账簿中的var账簿)
{
Console.WriteLine(book.GStitle);
}
}
公共课堂用书
{
公共字符串GStitle{get;set;}
}
公共静态void BookSort(Book[]books)
{
for(int y=0;y0)
{
var temp=账簿[x];
图书[x]=图书[x+1];
书籍[x+1]=临时;
}
}
}
}

这不是你问题的答案,但为什么要这样交换?为什么不做一些像
Book tempBook=Book[x];账簿[x]=账簿[y];book[y]=tempBook?@TentMan8001在我看来,这项任务相当学术化,你自己编写排序算法有什么原因吗?你是否考虑过用它来实现比较器和排序书?甚至可以与<代码>(书[X],书[y])=(书[Y],书[X])< /代码>交换。