您的位置:首页 > 编程语言 > C#

C#实现插入排序

2014-03-10 12:40 267 查看
感谢morewindows的文章,造福我等学渣啊 http://blog.csdn.net/morewindows/article/details/6665714
复杂度应该也是O(n^2)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 排序
{
class InsertSort1
{
public void ISort1(ref int[]a,int n) //n就是a.length
{
int i, j, k;
for ( i = 1; i < n;i++ )
{
//向有序数组a[0]-a[i-1]中插入a[i]
for(  j=i-1;j>=0;j--)
{
if (a[j] < a[i]) break;
}
if(j!=(i-1))
{
//如果应该放入的位置不在当前数组的结尾,就要将a[i]大的数依次向后挪
int t = a[i];
for(k=i;k>j+1;k--)
{
a[k] = a[k - 1];
}
//将待插入的a[i]放入数组合适的位置,注意这里不能是a[j]=t,因为j可能已经是-1;
a[k] = t;
}
}

}

}
}


//插入排序算法2:将数据后移和搜索a[i]的正确位置两步合并

public void ISort2(int[]a,int n)
{
print(a, n);
int i, j;
for(i=1;i<n;i++)
{
if(a[i]<a[i-1])
{
int t = a[i];
//将数据后移和搜索a[i]的正确位置两步合并
for(j=i-1;j>=0&&a[j]>t;j--)
{
a[j + 1] = a[j];
}
a[j + 1] = t;
}
}
print(a, n);
}

//插入排序算法3:用数据交换代替数据后移
public void ISort3(int[]a,int n)
{
print(a, n);
int i, j;
for( i=1;i<n;i++)
{
for(j=i-1;j>=0&&a[j]>a[j+1];j--)
{
swap(ref a[j], ref a[j + 1]);
}
}
print(a, n);
}
private void swap(ref int a,ref int b)
{
int t = a; a = b; b = t;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: