排序算法实现一
上一篇 /
下一篇 2010-03-19 14:38:47
/ 个人分类:数据结构
---直接插入排序-------------------------
void directInsert(int []arrs)
{
//由小到大排序数组
//直接插入为稳定的排序算法
int indx,temp,j, lens = arrs.Length;
for (indx = 1; indx < lens; indx++)
{
j = indx;//定位已排序序列范围
temp = arrs[indx];//待插入值
while (j>0&&arrs[j - 1] > temp)//前面有序序列中每个值与待插入值比较
{
arrs[j] = arrs[j - 1]; //有序序列向后挪位置给待插入值
j--;
}
arrs[j] = temp;//待插入值插入到合适的位置
}
}
---------------------------------------
---折半插入排序-------------------------
void halfinsertSort(int[]arrs)
{
//由小到大排序
//折半插入排序为稳定的排序算法
int indx, temp, j, lens = arrs.length;
int low, mid, high;
for (indx = 1; indx < lens; indx++)
{
temp = arrs[indx];
high=indx-1;
low=0;
while(low<=high){
mid =(low + high)/2;
if(arrs[mid] >temp){
high=mid-1;//向下比较
}
else{
low=mid+1; //向上比较
}
}
for(j=indx-1; j>=low; j--)//low至indx-1间有序值后移
{
arrs[j+1] = arrs[j];
}
arrs[low]=temp; //插入值
}
}
---希尔排序--------------------------------------
void shellSort(int[]arrs)
{ //非稳定的排序算法
int lens = arrs.Length;
int dis=lens/2,indx,temp;
while(dis>=1)
{
for (indx = 0; (indx <lens)&&(indx+dis<lens); indx++)
{
if (arrs[indx] > arrs[indx + dis])
{
temp = arrs[indx];
arrs[indx] = arrs[indx + dis];
arrs[indx + dis] = temp;
}else continue;
}
dis--;
}
}
收藏
举报
TAG: