排序算法之冒泡
思想步骤:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
给一个数组:
int[] arry = { 5, 1, 0, 4, 2, 8};
首先找出最一轮冒泡的过程:
static void Main(string[] args) { int[] arry = { 5, 1, 0, 4, 2, 8 }; FristMaopo(arry); }
//第一轮冒泡 static void FristMaopo(int[] arry) { //arry.Length-1 因为j和j+1比较所以要减1 for (int j = 0; j < arry.Length-1; j++) { if (arry[j] > arry[j + 1]) { var tempVal = arry[j + 1]; arry[j + 1] = arry[j]; arry[j] = tempVal; } } //输出打印 PrintCw(arry); }

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。这个话的意思是 大家都要冒泡,那就加一个循环哦,即双循环(n^2)
static void Main(string[] args) { int[] arry = { 5, 1, 0, 4, 2, 8 }; for (int i = 0; i < arry.Length; i++) { //FristMaopo(arry); //FristMaopo里面的代码加入进来就可以了 //arry.Length-1 因为j和j+1比较所以要减1。减i (-i 冒了多少轮就减多少i) for (int j = 0; j < arry.Length -1-i; j++) {
//替换 if (arry[j] > arry[j + 1]) { var tempVal = arry[j + 1]; arry[j + 1] = arry[j]; arry[j] = tempVal; } } } //输出打印 PrintCw(arry); }

static void Main(string[] args)
{
int[] arry = { 5, 1, 0, 4, 2, 8 };
for (int i = 0; i < arry.Length; i++)
{
//FristMaopo(arry);
//FristMaopo里面的代码加入进来就可以了
//arry.Length-1 因为j和j+1比较所以要减1。减i (-i 冒了多少轮就减多少i)
for (int j = 0; j < arry.Length -1-i; j++)
{
if (arry[j] > arry[j + 1])
{
var tempVal = arry[j + 1];
arry[j + 1] = arry[j];
arry[j] = tempVal;
}
}
for (int k = 0; k < arry.Length; k++)
{
Console.Write( arry[k] + " ");
}
Console.WriteLine();
}
//输出打印
Console.WriteLine("得到最终效果是:");
PrintCw(arry);
}

算法还可以继续优化的
浙公网安备 33010602011771号