C#冒泡排序

static void Main(string[] args)
{
int[] array = new int[6];
{
for (int i = 1; i <= 5; i++)
{

Console.WriteLine("请输入第{0}个同学的分数", i);
array[i] = int.Parse(Console.ReadLine());
}
}
}

#region 冒泡排序
public static void Sort(int[] array)
{
int i, j; // 循环变量
int temp; // 临时变量
for (i = 0; i < array.Length - 1; i++)
{
for (j = 0; j < array.Length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
// 交换元素
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}

}

}
public static void main(int[] array)
{
for (int i=1;i<=5;i++)
Console.WriteLine(array[i]);

}


谁能告诉我哪里出错了?

第1个回答  2019-12-05
这里有几个关键点要注意:
第一个是扩展数组的容量,Array.Resize方法的应用。
第二个是中间不能声明新的数组。这实际上要求方法上有所改变。
第三个是题目有歧义。“把str数组中前M个数按顺序排序插入到数组str2中”,“str数组中前M个数”是排序前的M个数,还是排序了的前M个数?“按顺序排序插入到数组str2中”,是str2先排序再插入还是追加到后面再排序?
根据以上几点,就生成了一下四种情况:
public
partial
class
Form1
:
Form
{
public
Form1()
{
InitializeComponent();
}
//冒泡排序1
public
void
BubbleSort1(int[]
a,
int
n)
{
int
i,
j;
for
(i
=
0;
i
<
n;
i++)
for
(j
=
1;
j
<
n
-
i;
j++)
if
(a[j
-
1]
>
a[j])
Swap(ref
a[j
-
1],ref
a[j]);
}
public
void
BubbleSort1(double
[]
a,
int
n)
{
int
i,
j;
for
(i
=
0;
i
<
n;
i++)
for
(j
=
1;
j
<
n
-
i;
j++)
if
(a[j
-
1]
>
a[j])
Swap(ref
a[j
-
1],ref
a[j]);
}
//冒泡排序2,优于1
public
void
BubbleSort2(int[]
a,
int
n)
{
int
j,
k;
bool
flag;
k
=
n;
flag
=
true;
while
(flag)
{
flag
=
false;
for
(j
=
1;
j
<
k;
j++)
if
(a[j
-
1]
>
a[j])
{
Swap(ref
a[j
-
1],ref
a[j]);
flag
=
true;
}
k--;
}
}
//冒泡排序3,优于2
void
BubbleSort3(int[]
a,
int
n)
{
int
j,
k;
int
flag;
flag
=
n;
while
(flag
>
0)
{
k
=
flag;
flag
=
0;
for
(j
=
1;
j
<
k;
j++)
if
(a[j
-
1]
>
a[j])
{
Swap(ref
a[j
-
1],ref
a[j]);
flag
=
j;
}
}
}
private
void
Swap(ref
int
a,
ref
int
b)
{
int
temp
=
a;
a
=
b;
b
=
temp;
}
private
void
Swap(ref
double
a,
ref
double
b)
{
double
temp
=
a;
a
=
b;
b
=
temp;
}
private
void
button1_Click(object
sender,
EventArgs
e)
{
int
N=8;
int
M=5;
int[]
str
=
new
int[]
{
0,2,6,8,4,5,6,7,8};
int[]
str2
=
new
int[]
{
0,
3,
7,
9,
5
};
//InsertArray(ref
str,ref
str2);
//先插入,后排序
InsertArray1(ref
str,
ref
str2);
//先对str2排序,后插入
//InsertArray2(ref
str,ref
str2);
//先插入,后排序
InsertArray3(ref
str,
ref
str2);
//先对str2排序,后插入
}
static
void
InsertArray(ref
int[]
str,ref
int
[]
str2)
{
int
n
=
str.Length;
int
m
=
str2.Length;
Array.Resize(ref
str2,
str2.Length
+
m);
//改变长度
//先插入,后排序
for
(int
i
=
0;
i
<
m
;
i++)
{
str2[i
+
m]
=
str[i];
}
Form1
frm=new
Form1()
;
frm.BubbleSort1(str2,
str2.Length
);
}
static
void
InsertArray1(ref
int[]
str,
ref
int[]
str2)
{
int
n
=
str.Length;
int
m
=
str2.Length;
//先对str2排序,后插入
Form1
frm=new
Form1()
;
frm.BubbleSort1(str2,
str2.Length
);
Array.Resize(ref
str2,
str2.Length
+
m);
//改变长度
for
(int
i
=
0;
i
<
m
;
i++)
{
for
(int
j
=
0;
j
<
m
+
i;
j++)
{
if
(str[i]
<
str2[j])
{
for
(int
l
=
m
+
i
;
l
>
j;
l--)
{
str2[l]
=
str2[l
-
1];
}
str2[j]
=
str[i];
break;
}
}
}
}
static
void
InsertArray2(ref
int[]
str,ref
int
[]
str2)
{
int
n
=
str.Length;
int
m
=
str2.Length;
Array.Resize(ref
str2,
str2.Length
+
m);
//改变长度
//先对str排序,再去前M个插入str2,后排序
Form1
frm=new
Form1()
;
frm.BubbleSort1(str,
str.Length
);
for
(int
i
=
0;
i
<
m
;
i++)
{
str2[i
+
m]
=
str[i];
}
frm.BubbleSort1(str2,
str2.Length
);
}
static
void
InsertArray3(ref
int[]
str,
ref
int[]
str2)
{
int
n
=
str.Length;
int
m
=
str2.Length;
//先对str排序,先对str2排序,再去前M个插入str2
Form1
frm
=
new
Form1();
frm.BubbleSort1(str,
str.Length);
frm.BubbleSort1(str2,
str2.Length);
Array.Resize(ref
str2,
str2.Length
+
m);
//改变长度
for
(int
i
=
0;
i
<
m;
i++)
{
for
(int
j
=
0;
j
<
m
+
i;
j++)
{
if
(str[i]
<
str2[j])
{
for
(int
l
=
m
+
i;
l
>
j;
l--)
{
str2[l]
=
str2[l
-
1];
}
str2[j]
=
str[i];
break;
}
}
}
}
}

用C#随机生成几个数并实现冒泡排序?
当然,以下是一个简单的C#程序,该程序首先生成一个随机数数组,然后使用冒泡排序算法对其进行排序:csharpusing System;class Program { static void Main(string[] args){ \/\/ 定义数组大小 int size = 10;int[] array = new int[size];\/\/ 生成随机数 Random rand = new Random();for (int ...

c# 冒泡排序的用法
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可...

用c#控制台应用程序,对输入的四个整数,求出其中的最大数和最小数,并...
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放...

c#怎么随机生成10个数字之后冒泡排序?
using System.Text;namespace Test { class BubbleSortTest { static public int[] BubbleSort(int[] R)\/\/冒泡算法 { int i, j, temp;\/\/交换标志 bool exchange;\/\/最多做R.Length-1趟排序 for (i = 0; i < R.Length; i++){ \/\/本趟排序开始前,交换标志应为假 exchange = false;f...

C#,从键盘输入 10个实数,存入一个数组,用冒泡法对这个数作降序排序...
重点就是冒泡排序的代码 void BubbleSort(List<int> li,){ int len=li.lengh; \/\/数组长度;int i;int j;for (j = 0; j < len - 1; j++){ for (i = 0; i < len - 1 - j; i++){ if (li[i] > li[i + 1]){ temp = li[i];li[i] = li[i + 1];li[i +...

Java和C#一共有几种排序方法
1、冒泡排序属于稳定排序,是一种借助“交换”进行排序的方法。首先要将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录与第三个记录的关键字,以此类推,直至第n-1个记录与第n个记录的关键字进行比较为止,这一过程称为第一趟冒泡排序,其结果...

C#冒泡排序
这里我只更改你的冒泡排序的方法,如果认为有用可以采纳:public static void Sort(int[] array){ int[] arr=new int[]{45,12,44,4,5};for(int j=1;j<arr.Length;j++){\/\/外循环每次把参与排序的最大数排在最后 for(int i=0;i<arr.Length-j;i++){ \/\/内层循环负责对比相邻的两个...

c# 冒泡排序里 内层循环的 n-1-i 怎么理解
所以 score.length-1知道吧,就这个道理,其次,-i的意思是这样的,外层循环做了多少次,就已经有多少项已经冒到最后了,对于它们,不用再去比较了,这个-i的作用就是避免再对已经冒到最后的项再比较一次,已经冒到最后的那些顶,你比较也好,不比较也好,都是一样的结果,为了效率,是不用比较的 ...

...100)把它们放入一个一维数组中,让后用冒泡排序从小到大排好输出...
{ static void Main(string[] args){ int[] nums = new int[10];Random random = new Random();\/\/随机数值 for (int i = 0; i < 10; i++){ nums[i] = random.Next(0, 100);} \/\/冒泡排序 从小到大 for (int i = 0; i < 9; i++){ for (int j = i + 1; j < ...

在c#中如何比较多个数字的大小?
C#中这样去解决:你把你输入这些所有工资放到一个数组里,比如array[1,2,3,...12],然后对这个数组里的数字进行排序(排序的算法比较的多,你就用冒泡排序吧),排完序后(按升序排),array[0]就是最小值,array[11]就是最大值。有了这个思路,剩下的就是看你自己代码如何去写了。如有问题...

相似回答