排序算法笔记-冒泡算法 Bubblesort

来源:互联网 发布:java多线程实现高并发 编辑:程序博客网 时间:2024/05/21 07:13

最近在复习排序算法,随性写了一个冒泡算法的实现,而且增加了一点UI和健壮性的语句,还用到了万年不用的goto,也是饶有兴致。程序本身还有很多可以提升和精简的地方,比如if分支判断的结构。分享出来,供刚刚接触排序算法的人学习。以下代码可以直接贴入VS-控制台项目中运行。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Bublesort{    class Program    {        static void Main(string[] args)        {            /*             * 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:C=n-1,M=0。             * 最佳时间复杂度为O(0);             * 若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。             * 在这种情况下,比较和移动次数均达到最大值:C=n(n-1)/2=O(n^2);M=3n(n-1)/2=O(n^2)             * 故最坏时间复杂度、平均复杂度为O(n^2)。             */            start:            Console.Write("请输入要排序的若干整数,用【空格】或【,】隔开,按回车结束(输入个数在100以内):\r\n");            string inputStr = Console.ReadLine();            inputStr = inputStr.Trim();            string[] strArr =  new string[100];            if(!inputStr.Contains(',')&&!inputStr.Contains(' '))            {                Console.Write("您没有使用规定的分隔符,按任意键后,程序将重新运行!");                Console.ReadKey();                Console.Clear();                goto start;            }            if (inputStr.Contains(',') && inputStr.Contains(' '))            {                Console.Write("您使用的分隔符不一致,按任意键后,程序将重新运行!");                Console.ReadKey();                Console.Clear();                goto start;            }            if (inputStr.Contains(' '))            {                strArr = inputStr.Split(' ');            }            if (inputStr.Contains(','))            {                strArr = inputStr.Split(',');            }            int[] intArr = new int[100];            for (int i = 0; i < strArr.Length; i++)            {                try                {                    intArr[i] = Convert.ToInt16(strArr[i]);                }                catch (Exception e)                {                    Console.Write(e);                    Console.Write("\r\n\n请参照上述错误信息修改输入的数据,按任意键后,程序将重新运行!");                    Console.ReadKey();                    Console.Clear();                    goto start;                }            }            Console.Write("\r\n您输入的是:");            foreach (string temp in strArr)            {                Console.Write(temp + " ");            }            Console.Write("\r\n");            Console.ReadKey();            int arrLength = strArr.Length;            for (int i = 0; i < strArr.Length; i++)                for (int j = 0 ; j < strArr.Length-1-i; j++)            {                int temp;                if (intArr[j] > intArr[j + 1])                {                    temp = intArr[j];                    intArr[j] = intArr[j + 1];                    intArr[j + 1] = temp;                }            }                        Console.Write("\r\n排序结果为:\r\n");            for (int i = 0; i < arrLength;i++ )            {                Console.Write(intArr[i] + " ");            }            Console.ReadKey();        }    }}




0 0
原创粉丝点击