" Hello World !"
1.冒泡排序
http://www.cnblogs.com/cj723/archive/2011/04/15/2016679.html
http://www.cnblogs.com/cj723/archive/2011/04/15/2016689.html
public void BubbleSort(int[] array)
{
//flag 是为了当当前数组是按正确顺序排列时就退出循环避免无谓的循环
bool flag = true;
for (int i = 0; i < array.Length && flag; i++)
{
flag = false;
//j>i 由于每次大循环之后都会将"当前"最小值排到前面所以下次时就无需比较这些最小值了
for (int j = array.Length-1; j > i; j--)
{
if (array[j-1]>array[j])
{
Swap(ref array[j],ref array[j - 1]);
//flag为true说明该次大循环有大小值的交换 进行了排序 需要进行下一次大循环
flag = true;
}
}
}
}
2.简单选择排序
http://www.cnblogs.com/cj723/archive/2011/04/18/2019536.html
public void SimpleSelectSort(int[] array)
{
int min;
for (int i = 0; i < array.Length; i++)
{
min = i; //暂时将当前下标的元素设为最小值的下标
//然后依次与该元素后面的元素比较,如果后面有元素比这个元素小,就将那个元素的下标设为最小值的下标,只是标记并没有交换
for (int j = i + 1; j < array.Length; j++)
{
if (array[min] > array[j])
{
min = j;
}
}
//如果最小下标不与当前下标i相等,说明有比下标i代表的元素小的元素存在,交换,然后i增加1 对新元素进行同样操作
if (i != min)
{
Swap(ref array[min], ref array[i]);
}
}
}
3.直接插入排序
http://mintelong.iteye.com/blog/467832
public void StraightInsertSort(int[] array)
{
int i, j,tmp;
//从第2个数开始插入前面的有序数列
for (i = 1; i < array.Length; i++)
{
//将此时的数保存到一个临时变量里
tmp = array[i];
//与此数之前的数做比较
j = i - 1;
//不断与此数之前的数比较 直到遇到比此数小的数 j>=0要放在前面否则当j减到等于-1时会报错 如派这些数字时55,88,5,8,77,7,66,6,22,2,33,3
while (j>=0&&tmp<array[j])
{
//将此数之前的 比此数大的数向后移
array[j + 1] = array[j];
j--;
}
//将此数放在正确的位置上
array[j+1] = tmp;
}
}
4.希尔排序
http://student.zjzk.cn/course_ware/data_structure/web/PAIXU/paixu8.2.2.1.htm
http://blog.sina.com.cn/s/blog_4b7bde1b0100ydcf.html
public void ShellSort(int[] array)
{
int len = array.Length;
for (int step = len / 2; step > 0; step /= 2)
{
for (int i = 0; i < step; i++)
{
SortGroup(array, len, i, step);
}
}
}
public void SortGroup(int[] array, int len, int begin, int step)
{
for (int i = begin + step; i < len; i += step)
{
for (int j = begin; j < i; j += step)
{
if (array[i] < array[j])
{
int temp = array[i];
//for (int k = i; k > j; k -= step)
//{
// array[k] = array[k - step];
//}
array[i] = array[j];
array[j] = temp;
}
}
}
}
5.堆排序
http://www.cnblogs.com/cj723/archive/2011/04/22/2024269.html
下面使用C#实现的,因为C#数组下标是从0开始的,所以与以上连接有所不同
public void myHeapSort(int[] array)
{
for (int i = array.Length / 2 - 1; i >= 0; i--)
{ //初始化大顶堆(通用方法)
HeapAdjust(array, i, array.Length - 1);
}
for (int i = array.Length - 1; i > 0; i--)
{ //将大顶堆最顶层的数(最大的数)与二叉树最后一个数交换,然后将剩下的数再次构成大顶堆,直到只剩下一个数(这个数就是最小的了)
Swap(ref array[0], ref array[i]);
HeapAdjust(array, 0, i - 1); //初始化大顶堆后才可以像这样构建大顶堆(不通用方法)
}
}
public void HeapAdjust(int[] array,int s,int m) //创建大顶堆
{
int temp = array[s];
for (int j =s*2+1; j <=m; j=j*2+1)
{
if (j<m&&array[j]<array[j+1])
{
j++;
}
if (temp>array[j])
{
break;
}
array[s] = array[j];
s = j;
}
array[s] = temp;
}
分享到:
相关推荐
在本系统中,我们主要实现了五种常用的排序算法:冒泡排序法、快速排序法、直接插入排序法、折半插入排序法和树形选择排序法。这些算法都是在计算机科学中最基本和最重要的排序算法,广泛应用于各种数据处理和分析...
常见的经典排序算法有希尔排序、二分插入法、直接插入法、带哨兵的直接排序法、冒泡排序、选择排序、快速排序、堆排序等。 一、希尔排序(Shell 排序法) 希尔排序法,又称宿小增量排序,是 1959 年由 D.L.Shell ...
常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...
在计算机科学领域,排序算法是数据处理中的核心部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型...
希尔排序是一种基于插入排序的算法,通过将待排序的数组元素按某个增量分组,然后对每组使用直接插入排序算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止...
本篇文章将介绍一种经典的排序算法——**合并排序法**(Merge Sort),并通过C语言实现该算法。合并排序是一种非常有效的排序方法,其核心思想是分治法:将数据分为若干个子集,对这些子集分别进行排序,最后将排序...
最快的排序算法 最快的内部排序法—桶排序法,排序算法数据结构
在IT领域,排序算法是计算机科学中的基础但至关重要的概念,尤其在数据处理和算法设计中扮演着核心角色。本文将深入探讨标题中提到的几种基于比较的排序算法:选择排序、插入排序、归并排序、快速排序、堆排序、冒泡...
最快的排序算法 最快的内部排序法—桶排序法 (1),排序算法数据结构
在计算机科学领域中,排序算法是一种基本的算法,它可以将数据按照一定的顺序排列,以便更好地存储、检索和处理数据。排序算法的速度和效率对程序的性能有着至关重要的影响。 1.冒泡排序算法 冒泡排序算法是一种...
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
根据给定文件的信息,本文将深入探讨C语言中的两种经典排序方法:插入排序法与冒泡排序法。这两种方法在实际编程中应用广泛,对于理解数据结构与算法的基础概念至关重要。 ### 一、冒泡排序法 #### 1.1 基本原理 ...
双向起泡排序法是一种在链表结构中实现的排序算法,尤其适用于双向链表。它借鉴了传统冒泡排序的基本思想,但在链表环境中进行了优化,以提高效率。本篇文章将详细探讨双向起泡排序法及其在带头结点的双向链表中的...
六种排序算法的排序系统 本篇文章主要讲解了六种排序算法的排序系统,包括插入排序、冒泡排序、选择排序、快速排序、堆排序和归并排序。该系统可以让用户选择六种排序算法中的任意一个,并输出结果。 插入排序 ...
在IT领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在数据处理和数据分析中起着关键作用。本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并...
在计算机科学中,排序算法是数据结构领域的重要组成部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让...
在计算机科学领域,排序算法是数据处理中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、...
时间复杂度用于衡量排序算法的效率,通常以大O表示法来表示。文档中提到了几种不同排序算法的时间复杂度: - **O(n²)**:插入排序、冒泡排序和选择排序的时间复杂度均为O(n²),这意味着随着数据量的增加,这些...
排序算法是计算机科学中最基础和重要的算法之一,用于将一组数据按照特定的顺序进行排列。本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其...
在编程领域,排序算法是计算机科学中的重要组成部分,特别是在数据处理和算法效率分析上。本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年...