zoukankan      html  css  js  c++  java
  • 排序算法

    第一篇博客就整理下排序算法吧 ,欢迎大家批评指正

    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace ConsoleApplication2
    {
        class Sort
        {
            //二分查找
            public static int Search(int[] data, int val)
            {
                if (data.Length < 0) { return -1; }
                int left = 0;
                int right = data.Length;
                while (left <= right)
                {
                    int middle = (left + right) / 2;
                    if (data[middle] == val)
                        return middle;
                    else if (data[middle] < val)
                        left = middle + 1;
                    else
                        right = middle - 1;
                }

                return -1;
            }
            //快速排序
            public static void QuickSearch(int[] dataArray, int left, int right)
            {
                int middle = dataArray[(left + right) / 2];
                int i = left;
                int j = right;
                do
                {
                    while (dataArray[i] < middle && i < right)
                        i++;
                    while (dataArray[j] > middle && j > left)
                        j--;
                    if (i <= j)
                    {
                        int temp = dataArray[i];
                        dataArray[i] = dataArray[j];
                        dataArray[j] = temp;
                        i++; j--;
                    }
                } while (i <= j);
                if (j > left)
                    QuickSearch(dataArray, left, j);
                if (i < right)
                    QuickSearch(dataArray, i, right);

            }
            //冒泡排序
            public static void Sort2()
            {

                int[] a = { 1, 3, 5 };
                int[] b = { 2, 4, 6 };
                int[] x = new int[a.Length + b.Length];
                a.CopyTo(x, 0);
                b.CopyTo(x, a.Length);

                for (int i = 0; i < x.Length; i++)
                {
                    for (int j = i + 1; j < x.Length; j++)
                    {
                        if (x[j] < x[i])
                        {
                            int temp = x[i];
                            x[i] = x[j];
                            x[j] = temp;
                        }
                    }
                    Console.WriteLine(x[i]);
                }
                Console.ReadLine();

            }

            //选择排序   
            public static int[] SortTest(int[] array)
            {
                int index;
                for (int i = 0; i < array.Length; i++)
                {
                    index = i;
                    for (int j = i; j < array.Length; j++)
                    {
                        if (array[index] > array[j])
                        {
                            index = j;
                        }
                    }
                    Swap(array, i, index);
                }
                return array;
            }
            private static void Swap(int[] numbers, int i, int j)
            {
                int number = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = number;
            }

            public static void MergeSortFunction(int[] array, int first, int last)
            {
                try
                {
                    if (first < last)   //子表的长度大于1,则进入下面的递归处理
                    {
                        int mid = (first + last) / 2;   //子表划分的位置
                        MergeSortFunction(array, first, mid);   //对划分出来的左侧子表进行递归划分
                        MergeSortFunction(array, mid + 1, last);    //对划分出来的右侧子表进行递归划分
                        MergeSortCore(array, first, mid, last); //对左右子表进行有序的整合(归并排序的核心部分)
                    }
                }
                catch (Exception ex)
                { }
            }

            //归并排序的核心部分:将两个有序的左右子表(以mid区分),合并成一个有序的表
            public static void MergeSortCore(int[] array, int first, int mid, int last)
            {
                try
                {
                    int indexA = first; //左侧子表的起始位置
                    int indexB = mid + 1;   //右侧子表的起始位置
                    int[] temp = new int[last + 1]; //声明数组(暂存左右子表的所有有序数列):长度等于左右子表的长度之和。
                    int tempIndex = 0;
                    while (indexA <= mid && indexB <= last) //进行左右子表的遍历,如果其中有一个子表遍历完,则跳出循环
                    {
                        if (array[indexA] <= array[indexB]) //此时左子表的数 <= 右子表的数
                        {
                            temp[tempIndex++] = array[indexA++];    //将左子表的数放入暂存数组中,遍历左子表下标++
                        }
                        else//此时左子表的数 > 右子表的数
                        {
                            temp[tempIndex++] = array[indexB++];    //将右子表的数放入暂存数组中,遍历右子表下标++
                        }
                    }
                    //有一侧子表遍历完后,跳出循环,将另外一侧子表剩下的数一次放入暂存数组中(有序)
                    while (indexA <= mid)
                    {
                        temp[tempIndex++] = array[indexA++];
                    }
                    while (indexB <= last)
                    {
                        temp[tempIndex++] = array[indexB++];
                    }

                    //将暂存数组中有序的数列写入目标数组的制定位置,使进行归并的数组段有序
                    tempIndex = 0;
                    for (int i = first; i <= last; i++)
                    {
                        array[i] = temp[tempIndex++];
                    }
                }
                catch (Exception ex)
                { }
            }
        }
    }

  • 相关阅读:
    今天18:40分左右一部价值500多块捷安特自行车被盗!
    利用ASP.net上传文件
    _desktop.ini
    Visual Studio .NET 设置移植工具
    审计厅的项目终于可以告一段落了
    Word2CHM Assistant(Word2CHM助手)V2.1.0 破解版
    最近比较烦!
    delphi 中 Format 用法总汇
    谈谈公司管理及需求方面的问题
    [待续]SQLSERVER无法访问远程服务器问题
  • 原文地址:https://www.cnblogs.com/dasydong/p/3280936.html
Copyright © 2011-2022 走看看