zoukankan      html  css  js  c++  java
  • 数据结构3排序算法

    冒泡排序

      算法描述:排序问题是基本算法,主要有冒泡算法、插入排序以及选择排序算法。冒泡算法是对整个列进行多次遍历循环,直至将所有的数都比较一遍,每次循环都能产生一个最大数放置于后面,这样需要两层循环:外层控制次数,内层控制单次冒泡,内层针对的是相邻里两个进行比较的循环。

    using System;
    
    class CArray
    {
        private int[] arr;
        private int upper;
        private int numElements;
    
        public CArray(int size)
        {
            arr = new int[size];
            upper = size - 1;
            numElements = 0;
        }
    
        public void Insert(int item)
        {
            arr[numElements] = item;
            numElements++;
        }
    
        public void DisplayElements()
        {
            for (int i = 0; i <= upper; i++)
            {
                Console.Write(arr[i]+" ");
            }
        }
    
        public void Clear()
        {
            for (int i = 0; i <= upper; i++)
            {
                arr[i] = 0;
                numElements = 0;
            }
        }
    
        static void Main()
        {
            CArray nums = new CArray(10);
            Random rnd = new Random();
            for (int i = 0; i <=nums.upper; i++)
            {
                nums.Insert(rnd.Next(0,100));
            }
            nums.DisplayElements();
            Console.ReadLine();
            nums.InsertionSort();
            Console.ReadKey();
        }
    
        //冒泡法排序
        public void BubbleSort()
        {
            int temp;
            for (int outer = upper; outer >0; outer--)
            {
                for (int inner = 0; inner < outer; inner++)
                {
                    if (arr[inner]>arr[inner+1])
                    {
                        temp = arr[inner];
                        arr[inner] = arr[inner + 1];
                        arr[inner+1] = temp;
                    }
                }
                this.DisplayElements();
                Console.Write("\n");
            }
    
    
        }
    
        //选择排序 每次从外层循环选择一个数,作为内层循环的初始化数,内层是将这个数从outer
      //的地方开始循环比较出现在的最小的,然后把这个索引值存放起来,内层循环一次就交换
      //至outer所在的数字.
        public void SelectionSort()
        {
            int min,temp;
            for (int outer = 0; outer < upper; outer++)
            {
                min=outer;
                for (int inner = outer+1; inner <= upper; inner++)
    			{
                    if (arr[inner]<arr[min])
                    {
                        min=inner;
                    }
    			}
                temp = arr[outer];
                arr[outer] = arr[min];
                arr[min] = temp;
                this.DisplayElements();
                Console.Write("\n");
            }
        }
    
        //插入排序
      //插入排序是用的最小的循环,在内层循环用while每次取外面一个数进行比较,从outer位置开始交换位置,直至
      //找到自己合适的位置
        public void InsertionSort()
        {
            int inner, temp;
            for (int outer = 1 ; outer <= upper; outer++)
            {
                temp = arr[outer];
                inner = outer;
                while (inner>0 && arr[inner-1]>temp)
                {
                    arr[inner] = arr[inner - 1];
                    inner -= 1;
                }
                arr[inner] = temp;
                this.DisplayElements();
                Console.Write("\n");
            }
        }
    }
    

    纸上得来终觉浅,绝知此事要躬行
  • 相关阅读:
    nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)
    使用逆波兰式进行表达式求值
    [moses笔记]编译含有nplm的moses解码器
    菲波那契数列编程实现
    引领网页设计潮流的优秀网页作品赏析
    MFC中获取各个窗口之间的句柄或者指针对象的方法
    UVALive 6529 Eleven 区间dp
    jquery 实现菜单的下拉菜单
    数字图像和视频处理的基础-第4周运动预计matlab练习题
    setjmp与longjmp
  • 原文地址:https://www.cnblogs.com/d2ee/p/1857796.html
Copyright © 2011-2022 走看看