C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
{
//插入排序
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;
}
}
}
}
}
{
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# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序的更多相关文章
- java排序算法(八):希尔排序(shell排序)
java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- 几种排序方式的java实现(02:希尔排序,归并排序,堆排序)
代码(部分为别人代码): 1.希尔排序(ShellSort) /* * 希尔排序:先取一个小于n的整数d1作为第一个增量, * 把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同 ...
- [Swift]八大排序算法(六):希尔排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- 【算法】【排序】【插入类】希尔排序 ShellSort
#include<stdio.h> #include <time.h> #include<stdlib.h> int main(){ ]; //设立随机数 sran ...
- 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现
内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
- JS快速排序 希尔排序 归并排序 选择排序
/* 快速排序 1.1 算法描述 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用.快速排序是一种既不浪费空间又可以快一 ...
随机推荐
- kibana 5.5 源码编译踩坑记录
由于项目需要定制开发kibana,因此需要编译kibana,在开发环境下运行. 注意:必须下载kibana 5.5的源码才能正常编译,下载release或者snapshot版本是不行的,运行npm ...
- java 类和对象2
编写Java应用程序.首先,定义一个时钟类——Clock,它包括三个int型成员变量分别表示时.分.秒,一个构造方法用于对三个成员变量(时.分.秒) 进行初始化,还有一个成员方法show()用于显示时 ...
- 【DotNetNuke介绍】
简介 DotNetNuke(以下简称DNN)的最终目的是创建一个门户的框架平台,这个平台可以为开发者增添模块搭建应用程序提供坚实的可靠的支持.应用程序的一个关键的功能就是数据存取..NET Frame ...
- Asp.Net中使用水晶报表(中)
Asp.Net中使用水晶报表(中) 使用Pull模式 我们将通过下面的这些步骤来通过Pull模式来执行水晶报表 1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接. 2.拖放一个 C ...
- RHEL启动错误:Kernel panic - not syncing:Attempted to kill init!解决方案
Virtual Box虚拟机启动RHEL系统报错,错误信息如下: 解决方案: 在GRUB引导界面按下e键,进入下图所示界面. 选择第二项,按下e键,进入编辑状态 在结尾追加enforcing=0,按下 ...
- Python开发注意事项
仅为记录自己在使用python过程的的一些心得! 1.服务器上运行脚本: windows服务器: 显式运行:在cmd中直接用python xxxx.py 运行一个py脚本文件. 后台运行:在cm ...
- vuejs v-bind
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 浅谈Sass与Less区别、优缺点
Sass是一种动态样式语言,Sass语法的缩排语法,比Css比多出很多功能,如变量,嵌套,运算,继承,颜色处理,函数等,易于阅读.Cass的安装需要安装Ruby环境,是服务器端处理的,Less是需要引 ...
- WSGI和CGI
https://www.zhihu.com/question/19998865 https://segmentfault.com/a/1190000003069785
- 新机器的vim配置
最近一直用vim去写acm代码,算是一种练习吧. 用着用着感觉不错,最近也稍微配置了一下vim,用着更舒服了 键盘映射 ESC<->CapsLock 我们知道vim有自带的键盘映射命令,但 ...