排序是数据处理中经常使用的一种重要运算。
设有{R
1,R
2,……R
n}是由n个记录组成的文件,其相应的关键集合为(K
1,K
2,……,K
n)。所谓排序就是将记录按关键码值不增(或不减)的次序排列起来。
由于文件大小不同使排序过程中涉及的存储器不同,可分为内部排序和外部排序两类。
整个排序过程都在内存进行的排序,称为内部排序,这是排序的基础。
内排序的方法很多,下面介绍几类最常见的排序方法。
using System;
namespace NowFox
{
public class Sorter
{
public void BubbleSort(int [] list)//冒泡排序
{
int i,j,temp;
j=1;
while(j<list.Length)
{
for(i=0;i<list.Length-j;i++)
{
if(list[i]>list[i+1])
{
temp=list[i];
list[i]=list[i+1];
list[i+1]=temp;
}
}
j++;
}
}
public void SelectionSort(int[] list)//选择排序
{
int i,j,temp;
for(i=0;i<list.Length-1;i++)
{
for(j=i+1;j<list.Length;j++)
{
if(list[i]>list[j])
{
temp=list[i];
list[i]=list[j];
list[j]=temp;
}
}
}
}
public void InsertionSort(int[] list)//插入排序
{
for(int i=1;i<list.Length;i++)
{
int temp=list[i];
int j=i;
while((j>0)&&(list[j-1]>temp))
{
list[j]=list[j-1];
j--;
}
list[j]=temp;
}
}
public void ShellSort(int[] list)//希尔排序
{
int inc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(int i=inc+1;i<=list.Length;i+=inc)
{
int temp=list[i-1];
int j=i;
while((j>inc)&&(list[j-inc-1]>temp))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=temp;
}
}
}
}
}