C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例。代码位置:http://download.csdn.net/detail/luozuolincool/8040027
排序类:
public class Sortings

    {

        //插入排序

        public void insertSort(int[] array)

        {

            int temp = 0;

            int index = 0;

            for (int i = 0; i < array.Length; i++)

            {

                for (int j = 0; j < i; j++)

                {

                    if (array[i] < array[j])//从j到i之间的数总体右移动。将i数据放到j位置

                    {

                        index = i;

                        temp = array[i];

                        while (index > j)

                        {

                            array[index] = array[index - 1];

                            index--;

                        }

                        array[j] = temp;

                        break;

                    }

                }

            }

            printArray(array, "插入排序:");

        }

        public void printArray(int[] array, String type)

        {

            Console.WriteLine(type);

            for (int i = 0; i < array.Length; i++)

            {

                Console.Write(array[i] + ",");

            }

            Console.WriteLine();

        }

        //冒泡排序

        public void bubbleSort(int[] array)

        {

            int temp = 0;

            bool exchanged = true;

            for (int i = 0; i < array.Length; i++)

            {

                if (!exchanged)

                    break;

                for (int j = array.Length - 1; j > i; j--)

                {

                    exchanged = false;

                    if (array[j] < array[j - 1])//后面的数比前面的小就交换

                    {

                        temp = array[j];

                        array[j] = array[j - 1];

                        array[j - 1] = temp;

                        exchanged = true;

                    }

                }

            }

            printArray(array, "冒泡排序:");

        }

        //选择排序:从前到后依次选择最小的放在最前面,第二小的放在第二个位置

        public void selectionSort(int[] array)

        {

            int minIndex = 0;

            int temp = 0;

            for (int i = 0; i < array.Length; i++)

            {

                minIndex = i;

                for (int j = i; j < array.Length; j++)

                {

                    if (array[j] < array[minIndex])

                        minIndex = j;

                }

                //将i到j之间最小的数放到位置i

                temp = array[minIndex];

                array[minIndex] = array[i];

                array[i] = temp;

            }

            printArray(array, "选择排序:");

        }

        //高速排序

        public void quickSort(int[] array)

        {

            quicksort1(array, 0, array.Length - 1);

            printArray(array, "高速排序:");

        }

        public void quicksort1(int[] array, int start, int end)

        {

            if (start >= end)

                return;

            int i = start, j = end;

            int k = array[i];

            while (i < j)

            {

                while (array[j] >= k && i < j)

                    j--;

                array[i] = array[j];

                while (array[i] < k && i < j)

                    i++;

                array[j] = array[i];

            }

            array[i] = k;

            quicksort1(array, start, i -1);

            quicksort1(array, i +1, end);

        }

        //堆排序

        public void stackSort(int[] array)

        {

            MyHeap h = new MyHeap();

            h.buildHeap(array);

            h.HeapSort();

            h.printHeap();

        }

        //归并排序

        public void mergeSort(int[] array)

        {

            mergeSort1(array, 0, array.Length - 1);

            printArray(array, "归并:");

        }

        private void mergeSort1(int[] array ,int start,int end)

        {

            if (start >= end)

                return;

            mergeSort1(array, start, (start+end) / 2);

            mergeSort1(array, (start + end) / 2+1,end);

            merge(array, start, (start + end) / 2, end);

            

        }

        private void merge(int[] array,int start,int mid,int end)

        {

            Queue<int> q = new Queue<int>();

            int i = start, j = mid + 1;

            while (i <=mid && j <=end)

            {

                if (array[i] < array[j])

                {

                    q.Enqueue(array[i]);

                    i++;

                }

                else

                {

                    q.Enqueue(array[j]);

                    j++;

                }

            }

            while (i <= mid)

                q.Enqueue(array[i++]);

            while (j <= end)

                q.Enqueue(array[j++]);

           

            for (i = start; i <= end; i++)

                array[i] = q.Dequeue();

        }

        //基数排序

        public void radixSort(int[] array)

        {

            int maxlength=0;//数据最大位数

            //申请空间用于存放数据

            List<List<int>> lists=new List<List<int>>();

            //申请10个桶,用于存放0-9

            for (int i = 0; i < 10; i++)

                lists.Add(new List<int>());

            //获取数据的最大位数

            for (int i = 0; i < array.Length; i++)

                maxlength = maxlength < array[i].ToString().Length ?

array[i].ToString().Length : maxlength;

            for (int i = 0; i < maxlength; i++)

            {

                //数据入桶

                for (int j = 0; j < array.Length; j++)

                {

                    lists[array[j] / (int)(Math.Pow(10, i)) - array[j] / (int)(Math.Pow(10, i+1))*10].Add(array[j]);

                }

                int t = 0;

                //将桶里面的数据又一次放入数组

                for (int k = 0; k < 10; k++)

                {

                    

                    foreach (int item in lists[k])

                        array[t++] = item;

                }

                //清空桶里面的数据

                for (int k = 0; k < 10; k++)

                {

                    lists[k].Clear();

                }





            }

            printArray(array, "基数排序");

        }

        //希尔排序

        public void shellSort(int[] array)

        {

            int step = array.Length / 2;

            while (step > 0)

            {

                shellInsert(array, step);

                Console.WriteLine();

                printArray(array, "希尔");

                step = step / 2;

            }

            printArray(array, "希尔");

        }

        private void shellInsert(int[] array,int step)

        {

            int temp = 0;

            int index = 0;

            for (int i = 0; i < array.Length; i=i+step)

            {

                for (int j = 0; j < i; j=j+step)

                {

                    if (array[i] < array[j])//从j到i之间的数总体右移动,将i数据放到j位置

                    {

                        index = i;

                        temp = array[i];

                        while (index > j)

                        {

                            array[index] = array[index - 1];

                            index--;

                        }

                        array[j] = temp;

                        break;

                    }

                }

            }

        }

    }

測试代码:
 static void Main(string[] args)

        {

            int[] array = { 12,3,23,4,21,44,2,3,11};

            Console.WriteLine("待排序数组:");

            for (int i = 0; i < array.Length; i++)

            {

                Console.Write(array[i]+",");

            }

            Console.WriteLine();

           // insertSort(array);

           // bubbleSort(array);

           // selectionSort(array);

          //  (new Sortings()).quickSort(array);

          //  (new Sortings()).stackSort(array);

           // (new Sortings()).mergeSort(array);

            //(new Sortings()).shellSort(array);

            (new Sortings()).radixSort(array);

            Console.Read();

        }

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序的更多相关文章

  1. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

  2. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  3. 几种排序方式的java实现(02:希尔排序,归并排序,堆排序)

    代码(部分为别人代码): 1.希尔排序(ShellSort) /* * 希尔排序:先取一个小于n的整数d1作为第一个增量, * 把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同 ...

  4. [Swift]八大排序算法(六):希尔排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  5. 【算法】【排序】【插入类】希尔排序 ShellSort

    #include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ ]; //设立随机数 sran ...

  6. 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现

    内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...

  7. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  8. 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较

    2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...

  9. JS快速排序 希尔排序 归并排序 选择排序

    /* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...

随机推荐

  1. Vim 删除不包含指定字符串的行及统计匹配个数

    Vim 删除不包含指定字符串的行及统计匹配个数 转载▼     Help :g/pattern/d 是找到pattern, 删之 :v/pattern/d 是找到非pattern, 删之 :%s/xx ...

  2. hdoj--2098--分拆素数和(水题)

    分拆素数和 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. 【DNN 系列】 模块开发 8.0.1

    1.创建第一个模块需要准备的东西有 https://github.com/dnnsoftware/DNN.Templates/releases/tag/1.0.1 VS 2015 插件 创建一个项目M ...

  4. hdu 2018 - 递推

    dp[i][1..4] 第i年时年龄为1234的牛的数目 */ #include <cstdio> #include <cstring> ; ]; int main(){ me ...

  5. UI Framework-1: Native Controls

    Native Controls Background Despite the fact that views provides facilities for custom layout, render ...

  6. github下载速度慢解决方法

    1.获取 global.ssl.fastly地址 访问 http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo 获取cdn域名以及ip地址  ...

  7. HDU-1032 The 3n+1 problem 模拟问题(水题)

    题目链接:https://cn.vjudge.net/problem/HDU-1032 水题 代码 #include <cstdio> #include <algorithm> ...

  8. Linux 部署项目经验总结

    [通用命令]  1.创建文件夹 mkdir -p xxx 2.解压包 tar -zxvf xxxx.tar.gz  3.缩文件 tar zcvf 压缩包名称.tar.gz 要压缩的文件  4.动命令  ...

  9. 使用let's encrypt为你的Ubuntu14+nginx网站保驾护航!

    finch最近正在研究一个新的网站系统,闲的没事想搞搞ssl,结果搞了两天,遇到很多问题,现在记录并分享一下经验. 环境之前搭建好了是Ubuntu14+nginx+php5+mysql 现在开始使用l ...

  10. 【Fiddler】使用fiddler抓取指定浏览器的包

    参考资料:http://blog.csdn.net/sufubo/article/details/49331705 使用fiddler抓取不到浏览器的包时常用的解决办法: 1.必须先打开Fiddler ...