一个冒泡排序程序,將交换数组的两个元素的功能用一个Swap()方法实现

zqfeng86 2011-06-20 06:46:48

namespace 冒泡排序
{
class Program
{
static void Main(string[] args)
{
int[] scores = new int[5];
int i, j;
int temp = 0;
int sum = 0;


//读入成绩
Console.WriteLine("请输入5个学员的成绩:");
for (i = 0; i < 5; i++)
{
Console.WriteLine("请输入第{0}个学员的成绩:",i + 1);
scores[i] = int.Parse(Console.ReadLine());

}
//开始排序---使用冒泡排序
for (i = 0; i < scores.Length - 1; i++)

{
//將最大的元素交换到最后
for (j = 0; j < scores.Length - 1 - i; j++)

{
if (scores[j] > scores[j + 1])
{
//交换元素

temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;

}
}
}
Console.WriteLine("排序后的成绩为:");

for (j = 0; j < scores.Length; j++)
{

Console.WriteLine("{0}\t",scores[j]);
sum = sum + scores[j];
Console.WriteLine("总成绩是:{0}",sum);

}
Console.WriteLine();
}
}
}

將此程序交换数组元素的功能写一个方法来实现!
...全文
384 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuexiaodong2009 的回复:]
不错啊,也可以使用加减法完成的
[/Quote]
加减法容易溢出...
xuexiaodong2009 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wjhgzx 的回复:]

C# code

方法1,异或法。不用中间变量
static void Swap1(ref int a, ref int b)
{
a = b ^ a;
b = b ^ a;
a = b ^ a;
}
方法2,用中间变量
static void Swap2(ref int a,ref int……
[/Quote]不错啊,也可以使用加减法完成的
wjhgzx 2011-06-20
  • 打赏
  • 举报
回复

方法1,异或法。不用中间变量
static void Swap1(ref int a, ref int b)
{
a = b ^ a;
b = b ^ a;
a = b ^ a;
}
方法2,用中间变量
static void Swap2(ref int a,ref int b)
{
int tmp;
tmp = b;
b= a;
a = tmp;
}
冒泡排序-排序过程 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何个气泡都是轻者在上,重者在下为止。 算法示例 49 13 13 13 13 13 13 13 38 49 27 27 27 27 27 27 65 38 49 38 38 38 38 38 97 65 38 49 49 49 49 49 76 97 65 49 49 49 49 49 13 76 97 65 65 65 65 65 27 27 76 97 76 76 76 76 49 49 49 76 97 97 97 97 Procedure BubbleSort(Var R : FileType) //从下往上扫描的起泡排序// Begin For I := 1 To N-1 Do //做N-1趟排序// begin NoSwap := True; //置未排序的标志// For J := N - 1 DownTo 1 Do //从底部往上扫描// begin If R[J+1]< R[J] Then //交换元素// begin Temp := R[J+1]; R[J+1 := R[J]; R[J] := Temp; NoSwap := False end; end; If NoSwap Then Return//本趟排序中未发生交换,则终止算法// end End; //BubbleSort// 该算法的时间复杂性为O(n2),算法为稳定的排序方 冒泡排序-冒泡排序法的改进 比如用冒泡排序将4、5、7、1、2、3这6个数排序。在该列中,第二趟排序结束后,数组已排好序,但计算机此时并不知道已经反排好序,计算机还需要进行一趟比较,如果这一趟比较,未发生任何数据交换,则知道已排序好,可以不再进行比较了。因而第三趟比较还需要进行,但第四、五趟比较则是不必要的。为此,我们可以考虑程序的优化。 为了标志在比较中是否进行了,设一个布尔量flag。在进行每趟比较前将flag置成true。如果在比较中发生了数据交换,则将flag置为false,在一趟比较结束后,再判断flag,如果它仍为true(表明在该趟比较中未发生一次数据交换)则结束排序,否则进行下一趟比较。

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧