《算法课》c# 冒泡算法

本文详细介绍了冒泡排序算法的实现过程,通过逐步分析和代码演示,展示了如何使用嵌套循环和条件判断对数组进行从小到大的排序。通过具体示例,读者可以深入了解冒泡排序的基本原理和操作步骤。

1.技术始于需求

现在有一组数组,需要按照从小到大排序:

int[] value = { 18, 16, 12, 2 };

每次用if进行判断,提取数组的第一个元素跟第二个元素进行对比,如果第一个比第二个大,就替换。表达式为:

int temp;  //创建一个临时变量

if(value[0]>value[1])

{

  temp=value[0];

  value[0]=value[1];

  value[1]=temp;

}

经过这步之后,数组的顺序变为{16,18,12,2} ,接下来第二个元素跟第三个元素对比。表达式为:

if(value[1]>value[2])

{

  temp=value[1];

  value[1]=value[2];

  value[2]=temp;

}

 经过这步之后,数组的顺序变为{16,12,18,2}。此时发现,每次对比只有数组的索引发生变化,所以可以用for循环代替。

for(int i=0; i<value.Length - 1; i++)

{

  if(value[ i ]>value[ i+1 ])

  {

    temp=value[ i ];

    value[ i ]=value[ i+1 ];

    value[ i+1 ]=temp;

  }

}

 经过for循环之后,数组的顺序变为{16,12,2,18}。第一次筛选只是把整个数组中最大的值排在了最后一个,所以还需要排序

{16,12,2} ,表达式为

for(int i=0; i<value.Length - 2; i++)  //只需在排序时忽略最后一个元素即可

{

  if(value[ i ]>value[ i+1 ])

  {

    temp=value[ i ];

    value[ i ]=value[ i+1 ];

    value[ i+1 ]=temp;

  }

}

经过这次循环之后,数组的顺序变为{12,2,16}。for循环就是为了消除单纯变化的部分。第一次循环条件为 i<value.Length - 1,第二次为i<value.Length - 2,所以可以创建另一个嵌套:

 for( j= items.Length - 1; j >= 0; j--) //用 j取代 i<value.Length - 1中的变化部分-->for (i = 0; i < j; i++)

完整部分: 

for(j= items.Length - 1; j>=0;j--)
            {
                for (i = 0; i < j; i++)
                {
                    if (items[i] > items[i + 1])
                    {
                        temp = items[i];
                        items[i] = items[i + 1];
                        items[i + 1] = temp;
                    }
                }
            }

 

完整代码为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WeiTuo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] value = { 18, 16, 12, 2 };
            SimpleSort.BubbleSort(ref value);
            for(int i = 0; i < value.Length ; i++)
            {
                Console.WriteLine(value[i].ToString());
            }
            Console.Read();
        }

        
    }
    static class SimpleSort
    {
        public static void BubbleSort(ref int[] items)
        {
            int i;
            int j;
            int temp;
            if (items == null)
                return;

            //for (i = 0; i < items.Length - 1; i++)
            //{
            //    if (items[i] > items[i + 1])
            //    {
            //        temp = items[i];
            //        items[i] = items[i + 1];
            //        items[i + 1] = temp;
            //    }
            //}
            for (j = items.Length - 1; j >= 0; j--)
            {
                for (i = 0; i < j; i++)
                {
                    if (items[i] > items[i + 1])
                    {
                        temp = items[i];
                        items[i] = items[i + 1];
                        items[i + 1] = temp;
                    }
                }
            }

        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值