`
isiqi
  • 浏览: 16361146 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

数据结构(C#)_排序算法(插入排序)

阅读更多
这两周也比较忙一些,今天继续我们的系列,将排序算法中的插入排序(包括了直接插入排序和希尔排序),我发现这本电子版的数据结构问题不少,很多代码都是有错误的,不能运行,不知道作者是怎么运行出结果的。而且还配有插图,同时在校对的时候也不是很严格,相同的一个函数,在不同的页中出现,会有变量名不相同的情况。下面我们介绍一下基本的概念:
插入排序:该排序是一种简单的排序方法,基本操作就是将一个记录插入已经排好序的有序表中,从而得到一个新的,记录数增加一的有序表。
希尔排序:又称缩小增量排序(Diminishing Increment Sort),属于插入排序类的一种排序,在时间复杂度上有较大的改进。基本思想是先将整个待排序记录序列分成若干个子序列分别进行直接插入排序,当整个序列基本有序,再对全部记录进行一次直接插入排序。

1namespaceSorting
2{
3classSortingAlgorithms
4{
5privateint[]arr;
6privateintupper;
7privateintnumElement;
8
9//初始化数组
10publicSortingAlgorithms(intsize)
11{
12arr=newint[size];
13upper=size-1;
14numElement=0;
15}

16
17//给数组插入元素
18publicvoidInsert(intitem)
19{
20arr[numElement]=item;
21numElement++;
22}

23
24//打印数组元素
25publicvoidDisplayElement()
26{
27for(inti=0;i<=upper;i++)
28{
29Console.Write(arr[i]+"");
30}

31Console.ReadLine();
32}

33
34publicvoidCleaArry()
35{
36for(inti=0;i<=upper;i++)
37{
38arr[i]=0;
39numElement=0;
40}

41}

42
43//选择排序,数据量大的时候效率较高
44publicvoidSelectionSort()
45{
46intMin,Temp;
47for(intOuter=0;Outer<=upper;Outer++)
48{
49Min=Outer;
50for(intInner=Outer+1;Inner<=upper;Inner++)
51{
52if(arr[Inner]<arr[Min])
53{
54Min=Inner;
55
56}

57Temp=arr[Outer];
58arr[Outer]=arr[Min];
59arr[Min]=Temp;
60
61}

62}

63}

64
65
66//插入排序(版本一)
67//插入排序当数据量较大的时候效率不高
68publicvoidInsertionSort()
69{
70intInner,Temp;
71for(intOuter=1;Outer<=upper;Outer++)
72{
73Temp=arr[Outer];
74Inner=Outer;
75while(Inner>0&&(arr[Inner-1]>=Temp))
76{
77arr[Inner]=arr[Inner-1];//向后移动二者较大的元素
78Inner-=1;
79
80}

81arr[Inner]=Temp;
82}

83}

84
85//这个版本是和我们的C语言版的数据结构课本上的的类似
86//插入排序(版本二)
87publicvoidInserSort()
88{
89intInner,Temp;
90for(intOuter=1;Outer<=upper;Outer++)
91{
92//将每一趟比较的哨兵元素复制给Temp
93Temp=arr[Outer];
94for(Inner=Outer;(Inner>0&&arr[Inner-1]>Temp);Inner--)
95{
96//向后移动大的元素
97arr[Inner]=arr[Inner-1];
98}

99//将哨兵赋值
100arr[Inner]=Temp;
101}

102}

103
104
105//希尔排序(原书代码,有问题)
106/**//*publicvoidShellSorts()
107{
108intInner,Temp;
109inth=1;
110while(h<=(numElement/3))
111{
112h=h*3+1;
113while(h>0)
114{
115for(intOuter=h;Outer<=numElement-1;h++)
116{
117Temp=arr[Outer];
118Inner=Outer;
119
120while((Inner>h-1)&&arr[Inner-h]>=Temp)
121{
122arr[Inner]=arr[Inner-h];
123Inner-=h;
124}
125arr[Inner]=Temp;
126
127}
128h=(h-1)/3;
129}
130}
131
132}
133*/

134
135
136//希尔排序
137publicvoidShellSortingAlgorithms()
138{
139intTemp;
140//初始增量序列
141intIncrement=upper/2;
142while(Increment!=0)
143{
144for(inti=Increment;i<=upper;i++)
145{
146intj;
147Temp=arr[i];
148for(j=i;j>=Increment;j=j-Increment)//同子序列的插入排序
149{
150if(Temp<arr[j-Increment])
151arr[j]=arr[j-Increment];//如果后面的小于前面的,交换位置
152else
153break;
154}

155arr[j]=Temp;//插入
156}

157//减小增量序列
158Increment/=2;
159}

160
161}

162
163
164}

调用算法的过程:
1staticvoidMain(string[]args)
2{
3SortingAlgorithmsMyArray=newSortingAlgorithms(10);
4Randomrnd=newRandom(100);
5
6longTicks=DateTime.Now.Ticks;
7for(inti=0;i<10;i++)
8{
9MyArray.Insert((int)(rnd.NextDouble()*100));
10}

11color:
分享到:
评论

相关推荐

    c#各种排序算法动态图形演示-数据结构经典算法动态演示

    本资源"c#各种排序算法动态图形演示-数据结构经典算法动态演示"显然是一个专注于通过动态图形展示C#中不同排序算法工作原理的教学资料。 首先,让我们深入了解一下几种常见的排序算法: 1. 冒泡排序(Bubble Sort...

    C#数据结构、排序算法实现(全)(内含使用实例)

    在C#编程中,数据结构和排序算法是基础且至关重要的概念,对于任何软件开发者来说,理解和掌握它们都是必备技能。本资源包含了C#实现的数据结构和排序算法的完整实例,旨在帮助C#学习者深化理解并提升实战能力。 ...

    C#排序算法_C#_

    在编程领域,排序算法是数据结构与算法学习中的重要组成部分,尤其在C#这样的面向对象编程语言中,理解和掌握各种排序算法对提升程序...同时,阅读提供的"C#排序算法.pdf"文档将有助于深入理解这些算法的细节和实现。

    C#实现插入排序算法

    在编程领域,排序算法是数据结构与算法课程中的基础部分,它对于理解计算机如何处理和组织数据至关重要。本文将深入探讨C#语言中实现插入排序算法的方法,以及其在升序和降序排序中的应用。 插入排序是一种简单直观...

    C#排序算法(C#)

    在编程领域,排序算法是数据结构与算法中的基础部分,对于C#开发者来说,掌握不同的排序算法至关重要。本文将深入探讨C#语言中常见的几种排序算法,包括它们的工作原理、性能特点以及如何在C#代码中实现。 1. **...

    武汉大学 C#数据结构与算法

    《武汉大学 C#数据结构与算法》是一门深入探讨计算机科学基础的课程,主要针对C#编程语言,涵盖了数据结构和算法这两个核心概念。在学习这门课程时,你将有机会掌握C#语言如何用于实现高效的数据管理和计算方法。 1...

    C#排序算法详解.rar

    本资料“C#排序算法详解”聚焦于如何在C#中实现各种排序算法,帮助学习者深入理解并提升编程技能。 1. **冒泡排序**:冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来完成排序。C#实现...

    C#数据结构算法 中文版本

    算法则是解决问题的步骤序列,C#中的算法涵盖了排序(如冒泡排序、选择排序、插入排序、快速排序、归并排序)、搜索(线性搜索、二分搜索)、图算法(深度优先搜索、广度优先搜索)、动态规划、贪心算法等。这些算法...

    C#经典排序算法集所有经典的算法

    首先,我们来详细了解一下几种常见的C#排序算法: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是最基础的排序算法之一,它通过不断交换相邻的不正确顺序元素来逐步排序。在C#中,冒泡排序通常用两个嵌套循环实现,...

    插入排序的设计实现分析比较.rar_C# 插入_插入排序

    **插入排序设计与实现分析**...总的来说,插入排序是编程初学者理解和学习排序算法的良好起点,而C#的实现则提供了清晰的代码结构和直观的操作逻辑。通过深入研究和实践,我们可以更好地掌握这种基础且实用的排序方法。

    数据结构C#实验排序动画演示

    "数据结构C#实验排序动画演示"提供了对多种经典排序算法的直观理解,通过动态演示帮助我们更好地掌握这些算法的工作原理。 首先,让我们详细了解这些排序算法: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,...

    数据结构 C#实现 各种算法 线性表,树,单链表

    ### 数据结构C#实现知识点概览 #### 一、数据结构与C#语言结合的意义 在当前快速发展的信息技术领域中,数据结构与算法是计算机科学的核心组成部分,它们为解决复杂问题提供了理论基础和技术手段。随着.NET平台的...

    c#+排序算法大全+经典算法

    这个资料包为学习者提供了一个全面了解和实践C#排序算法的平台,无论是初学者还是经验丰富的程序员,都能从中受益。 在实际应用中,选择哪种排序算法取决于具体的需求,比如数据规模、是否允许原地排序(不占用额外...

    C#数据结构、排序算法实现(内含使用实例)

    本文将围绕C#语言,详细讲解数据结构的实现以及各种排序算法的应用,结合具体实例来帮助读者深入理解。 首先,我们要了解什么是数据结构。数据结构是指在计算机中组织和存储数据的方式,它提供了对数据的有效访问和...

    C# 数据结构 源代码 《数据结构与算法——C#语言描述》

    《数据结构与算法——C#语言描述》是一本专为C#程序员设计的教材,它深入探讨了数据结构和算法的基础知识,通过C#语言来实现各种数据结构和算法,帮助开发者提升编程技能和解决问题的能力。书中涵盖的内容广泛,包括...

    C#四种排序算法 算法最牛逼

    在编程领域,排序算法是数据结构与算法中的基础部分,对于任何编程语言,理解并掌握各种排序算法都是非常重要的。在C#中,我们通常会遇到几种经典的排序算法,包括冒泡排序、插入排序、选择排序以及快速排序。下面将...

    C# 各种排序算法实现与对比

    在编程领域,排序算法是数据结构与算法课程中的核心部分,尤其在C#这样的面向对象编程语言中,理解和掌握各种排序算法的实现及其性能特点至关重要。本文将详细讲解C#中实现的几种常见排序算法,并对它们的执行效率...

    C#各种排序算法代码

    在编程领域,排序算法是数据结构与算法学习中的核心部分,尤其在C#这样的面向对象编程语言中,理解和实现各种排序算法对提升编程能力至关重要。本资料包包含了一系列的C#实现的排序算法代码,旨在帮助开发者深入理解...

    c#各种排序算法大全

    插入排序是一种简单的排序算法,通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上通常采用in-place排序(即只需用到O(1)的额外空间),因此空间效率较高。 **...

    C#实现的常见排序算法(博客的Demo)

    在IT领域,排序算法是计算机科学中的基础概念,它们用于对数据进行有序排列。C#是一种广泛应用的编程语言,尤其在开发...学习和实践这些基本的排序算法,不仅能提升编程技能,也有助于理解更复杂的算法和数据结构。

Global site tag (gtag.js) - Google Analytics