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])< /代码>交换。