- 浏览: 128323 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hulibo:
太简单了 没参考价值
网上商城的数据库设计 -
lfc:
[img][/img][url][/url][flash= ...
Petshop 4.0 详细解释 -
早上好朋友:
引用
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
早上好朋友:
[flash=200,200][/flash][url][/u ...
自学MVC(十):自己写的通用的JS分页控件-2009年05月27日 -
银杏树:
参考一下。
网上商城的数据库设计
一,冒泡排序
/// <summary>
/// bubbleSort;
///
/// /*理解其实程序就是思路的复述而已*/
/// </summary>
/// <param name="desti">目标数组</param>
/// <param name="swapTimes">交换次数</param>
public static void BubleSort(ref int[] desti, ref int swapTimes)
{
int destiLen = desti.Length;
/******各重循环各行其是即可********/
//冒泡次数,因为最后一次已经是最小,所以destiLen - 1
for(int i = 0; i < destiLen - 1; i ++)
{
bool ins = true;
//各次冒泡;前面已冒泡元素的位置无需冒泡;
for(int j = 0; j < destiLen - i - 1; j ++)
{
if(desti[j] > desti[j + 1])
{
ins = false;
Swap.Swaper(ref desti[j], ref desti[j + 1]);
swapTimes ++;
}
}
if(ins)
break;
}
}
/// bubbleSort;
///
/// /*理解其实程序就是思路的复述而已*/
/// </summary>
/// <param name="desti">目标数组</param>
/// <param name="swapTimes">交换次数</param>
public static void BubleSort(ref int[] desti, ref int swapTimes)
{
int destiLen = desti.Length;
/******各重循环各行其是即可********/
//冒泡次数,因为最后一次已经是最小,所以destiLen - 1
for(int i = 0; i < destiLen - 1; i ++)
{
bool ins = true;
//各次冒泡;前面已冒泡元素的位置无需冒泡;
for(int j = 0; j < destiLen - i - 1; j ++)
{
if(desti[j] > desti[j + 1])
{
ins = false;
Swap.Swaper(ref desti[j], ref desti[j + 1]);
swapTimes ++;
}
}
if(ins)
break;
}
}
二,插入排序
/// <summary>
/// 原始插入排序
/// </summary>
/// <param name="dest">目标数组</param>
/// <param name="swapTimes">交换次数</param>
public static void InsertSort(ref int[] dest, ref int swapTimes)
{
//其实根本没必要一个dest.length数组,使得空间复杂度增大
//只需一个int零时变量即可,当前要排序的元素腾出即可
ArrayList destArray = new ArrayList();
destArray.Add(dest[0]);
for(int i = 1; i < dest.Length; i ++)
{
bool ins = false;
for(int j = 0; j <= i - 1; j ++)
{
if(dest[i] < (int)destArray[j])
{
ins = true;
swapTimes ++;
destArray.Insert(j, dest[i]);
break;
}
}
if(! ins)
destArray.Insert(i, dest[i]);
}
for(int i = 0; i < dest.Length; i ++)
{
dest[i] = (int)destArray[i];
}
}
/// 原始插入排序
/// </summary>
/// <param name="dest">目标数组</param>
/// <param name="swapTimes">交换次数</param>
public static void InsertSort(ref int[] dest, ref int swapTimes)
{
//其实根本没必要一个dest.length数组,使得空间复杂度增大
//只需一个int零时变量即可,当前要排序的元素腾出即可
ArrayList destArray = new ArrayList();
destArray.Add(dest[0]);
for(int i = 1; i < dest.Length; i ++)
{
bool ins = false;
for(int j = 0; j <= i - 1; j ++)
{
if(dest[i] < (int)destArray[j])
{
ins = true;
swapTimes ++;
destArray.Insert(j, dest[i]);
break;
}
}
if(! ins)
destArray.Insert(i, dest[i]);
}
for(int i = 0; i < dest.Length; i ++)
{
dest[i] = (int)destArray[i];
}
}
三,shell排序
/// <summary>
/// shell sort
/// </summary>
/// <param name="dest">待排序数组</param>
/// <param name="swapTimes">移动元素次数</param>
public static void ShellSort(ref int[] dest, ref int swapTimes)
{
for(int delta = dest.Length / 2; delta >= 0; delta /= 2)
{
if(delta == 0)
break;
else
{
for(int i = 0; i < delta; i ++)
{
for(int j = i; j < dest.Length; j += delta)
{
int temp = dest[j];
int tmp = j;
while(tmp >= delta && temp < dest[tmp - delta])
{
dest[tmp] = dest[tmp - delta];
swapTimes ++;
tmp -= delta;
}
dest[tmp] = temp;
}
}
}
}
}
/// shell sort
/// </summary>
/// <param name="dest">待排序数组</param>
/// <param name="swapTimes">移动元素次数</param>
public static void ShellSort(ref int[] dest, ref int swapTimes)
{
for(int delta = dest.Length / 2; delta >= 0; delta /= 2)
{
if(delta == 0)
break;
else
{
for(int i = 0; i < delta; i ++)
{
for(int j = i; j < dest.Length; j += delta)
{
int temp = dest[j];
int tmp = j;
while(tmp >= delta && temp < dest[tmp - delta])
{
dest[tmp] = dest[tmp - delta];
swapTimes ++;
tmp -= delta;
}
dest[tmp] = temp;
}
}
}
}
}
四,快速排序
public static void QuickSort(ref int[] dest, int beg, int end, ref int swapTimes)
{
if(beg >= end)
return;
int pivot = (beg + end) / 2;
Swap.Swaper(ref dest[pivot], ref dest[end]);
int pivo = Partition(ref dest, beg, end, ref swapTimes);
QuickSort(ref dest, beg, pivo - 1, ref swapTimes);
QuickSort(ref dest, pivo + 1, end, ref swapTimes);
}
{
if(beg >= end)
return;
int pivot = (beg + end) / 2;
Swap.Swaper(ref dest[pivot], ref dest[end]);
int pivo = Partition(ref dest, beg, end, ref swapTimes);
QuickSort(ref dest, beg, pivo - 1, ref swapTimes);
QuickSort(ref dest, pivo + 1, end, ref swapTimes);
}
private static int Partition(ref int[] dest, int be, int en, ref int swapTimes)
{
int temp = dest[en];
int b = be;
int e = en;
while(b != e)
{
while(dest[b] < temp && b < e)
b ++;
if(b < e)
{
dest[e] = dest[b];
e --;
swapTimes ++;
}
while(dest[e] > temp && b < e)
{
e --;
}
if(b < e)
{
dest[b] = dest[e];
b ++;
swapTimes ++;
}
}
{
e --;
}
if(b < e)
{
dest[b] = dest[e];
b ++;
swapTimes ++;
}
}
dest[b] = temp;
return b;
return b;
}
五,两路归并排序
/// <summary>
/// 对目标数组进行归并排序
/// 与QuickSort的分治比较,感受递归
/// </summary>
/// <param name="dest">目标数组</param>
/// <param name="tempDest">暂存数组</param>
/// <param name="left">当前部分左位置</param>
/// <param name="right">当前部分右位置</param>
/// <param name="swapTimes">当前部分中间位置</param>
public static void TwoWayMergeSort(int[] dest, int[] tempDest, int left, int right, ref int swapTimes)
{
if(left < right)
{
int mid = (left + right) / 2;
//分割通过递归实现
TwoWayMergeSort(dest, tempDest, left, mid, ref swapTimes);//左一半
TwoWayMergeSort(dest, tempDest, mid + 1, right, ref swapTimes);//右一半
Merge(dest, tempDest, left, right, mid, ref swapTimes);//对左右各半进行归并
}
}
/// 对目标数组进行归并排序
/// 与QuickSort的分治比较,感受递归
/// </summary>
/// <param name="dest">目标数组</param>
/// <param name="tempDest">暂存数组</param>
/// <param name="left">当前部分左位置</param>
/// <param name="right">当前部分右位置</param>
/// <param name="swapTimes">当前部分中间位置</param>
public static void TwoWayMergeSort(int[] dest, int[] tempDest, int left, int right, ref int swapTimes)
{
if(left < right)
{
int mid = (left + right) / 2;
//分割通过递归实现
TwoWayMergeSort(dest, tempDest, left, mid, ref swapTimes);//左一半
TwoWayMergeSort(dest, tempDest, mid + 1, right, ref swapTimes);//右一半
Merge(dest, tempDest, left, right, mid, ref swapTimes);//对左右各半进行归并
}
}
/// <summary>
/// 对当前部分进行归并
/// </summary>
/// <param name="dest"></param>
/// <param name="tempDest"></param>
/// <param name="left"></param>
/// <param name="right"></param>
/// <param name="mid"></param>
/// <param name="swapTimes">逆置位置</param>
private static void Merge(int[] dest, int[] tempDest, int left, int right, int mid, ref int swapTimes)
{
for(int i = left; i <= right; i ++)
tempDest[i] = dest[i];
int index1 = left;
int index2 = mid + 1;
int index = left;//用left很重要,如若是0则会对dest的位置重复赋值
//|-------|--------|
// ^index1 ^index2,体现了归并的妙
while(index1 <= mid && index2 <= right)
{
if(tempDest[index1] <= tempDest[index2])
{
dest[index ++] = tempDest[index1 ++];
}
else
{
dest[index ++] = tempDest[index2 ++];
swapTimes ++;
}
}
while(index2 <= right)
{
dest[index ++] = tempDest[index2 ++];
}
/// 对当前部分进行归并
/// </summary>
/// <param name="dest"></param>
/// <param name="tempDest"></param>
/// <param name="left"></param>
/// <param name="right"></param>
/// <param name="mid"></param>
/// <param name="swapTimes">逆置位置</param>
private static void Merge(int[] dest, int[] tempDest, int left, int right, int mid, ref int swapTimes)
{
for(int i = left; i <= right; i ++)
tempDest[i] = dest[i];
int index1 = left;
int index2 = mid + 1;
int index = left;//用left很重要,如若是0则会对dest的位置重复赋值
//|-------|--------|
// ^index1 ^index2,体现了归并的妙
while(index1 <= mid && index2 <= right)
{
if(tempDest[index1] <= tempDest[index2])
{
dest[index ++] = tempDest[index1 ++];
}
else
{
dest[index ++] = tempDest[index2 ++];
swapTimes ++;
}
}
while(index2 <= right)
{
dest[index ++] = tempDest[index2 ++];
}
while(index1 <= mid)
{
dest[index ++] = tempDest[index1 ++];
}
}
{
dest[index ++] = tempDest[index1 ++];
}
}
发表评论
-
webservice的几种调用方法
2009-10-10 17:35 1262一、WebService在cs后台程序中的调用 ... -
我是如何学习设计模式的十:工厂模式-这个是我花的心思最多的
2009-10-09 10:39 1084工厂模式 为什么会出 ... -
Asp.net ViewState
2009-08-27 14:20 1364ASP.NET中的ViewState ViewSta ... -
Stack,Queue,SortedList
2009-08-04 15:23 908using System; using System.Dat ... -
匿名方法
2009-08-04 09:21 845匿名方法优点:减少系统开销,在真正委托调用时才定义。 usi ... -
.NET WebService的创建、部署、运用
2009-07-24 13:41 1441项目要求:(简单点讲) ... -
C#生成缩略图
2009-07-13 10:01 1668using System; using System.Dat ... -
.net MD5
2009-06-17 10:19 903using System; using System.Dat ... -
给RadionButtonList控件加onclick属性
2009-05-13 16:25 1077RadionButtonList _Specialclassi ... -
设计模式学习笔记七:常用设计模式原则总结
2009-05-12 15:43 1027前面学习了一部分创建 ... -
设计模式学习笔记六——Adapter模式
2009-05-12 15:42 728动机:将一个类的接口转换成客户希望的另外一个接口,使得原本由于 ... -
设计模式学习笔记六:.NET反射工厂
2009-05-12 15:02 40241. 简述 通过前面的学习,我们以传统的方式实现了 ... -
设计模式学习笔记五——Prototype模式
2009-05-12 15:01 1058动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创 ... -
设计模式学习笔记五:抽象工厂(Abstract Factory)
2009-05-12 14:58 14431.概述 意图: 提供一个创建一系列相关 ... -
设计模式学习笔记四——Builder模式
2009-05-12 14:52 1125动机:一个复杂对象由多个子对象构成,该对象创建的算法相对不变, ... -
设计模式学习笔记四:工厂方法(Factory Method)
2009-05-12 14:51 8901.概述 在软件系统中,经常面临着“某个对象”的创建工作 ... -
设计模式学习笔记三——Abstract Factory模式
2009-05-12 14:51 983动机:实现一系列相互依赖对象的创建,通过封装系列对象创建来隔离 ... -
设计模式学习笔记三:简单工厂(Simple Factory)
2009-05-12 14:50 894开始学习创建型模式,这些模式的使用是面向接口编程的必然结果,面 ... -
设计模式学习笔记二——Singleton模式
2009-05-12 14:49 853意图:出于某种目的(如性能考虑、逻辑性要求)要求一个类的实例只 ... -
设计模式学习笔记二:面向对象基础六之委托与事件
2009-05-12 14:48 1197委托 委托作为函 ...
相关推荐
List类几种排序方法比较灵活 可以根据自己的需要 选用合适的方法
6个排序的算法...折腾我挺久的 快速排序是参照了另外一个人的程序,而堆排序也是...堆排序我自己都看不怎么懂 主要也是关键字比较次数和交换次数吧.也不知道对不对 有错误还希望各位指出,谢谢!
用C#实现的几种典型排序算法,包括二叉树排序、快速排序、希尔排序、插入排序、冒泡排序、选择排序等,代码简单易懂,适合初学者,供学习教育用
适合初学者的几种排序(冒泡,快速等),用vs等打开
C#中常用排序算法的一些实例代码,程序还提供了一个演示窗口,以命令提示符的方式显示算法结果,让人一目了然就能看到算法的结果,比较适合c#初学者。...通过这个小实例你会对这几种常用的排序算法有一些理解。
c#的几种典型算法:插入排序、乘法表、迭代、公约、回文、计算器等
这个程序里面写了好几种排序算法,是用C#实现的。包括插入排序;选择排序;堆排序;快速排序;自底向上排序;合并排序。
举了几种例子,是用代码写的,很好看懂(注:转载于)
本程序主要演示了归并,插入,快排等几种排序算法在各种不同数据量的情况下的算法效率,适合编程新手对排序算法的认识和学习
作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序 using System; namespace BubbleSorter { public class BubbleSorter { public void Sort(int ...
关于对C#排序的几种算法包括冒泡,选择,插入,希尔排序方法
前段时间因为项目需要,做了个用来对数组排序的类,顺便把以前学过的几种排序算法用C#实现一下。用C#的一些机制来诠释了一下算法的是实现。在阅读本之前,需要一些对C#的有些基本的了解,了解方法参数中out ,ref的...
今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用的属性、方法、类和各种技术,...
快速排序在时间复杂度同为O(N*logN)的几种排序方法中效率较高,因而比较常用,接下来这里就来逐步讲解快速排序算法及C#版的实现示例
主要介绍了C#排序算法的比较,实例分析几种比较常见的算法,并对其时间复杂度与稳定性进行了详细的分析,需要的朋友可以参考下
后续内容主要涉及c#中的几种控制语句、方法的使用、数组、linq、类与对象、继承、多态、接口、运算符重载、异常处理、gui、字符串和字符处理、文件和流操作、数据库、asp.net、搜索与排序、数据结构、泛型、集合等。...
C#语言在.NET 框架中的作用及其特性 1.1 Microsoft.NET 一场新的革命 1.1.1 什么是.NET 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都将成为值得纪念的一天 这一天 微软公司正式推出...