1.试以单链表为存储结构,实现简单选择排序算法
void Insertsort(Linklist &L)
{
Linklist p=L->next;
Linklist q=L->next;
Linklist minp=p;
int temp;
while§
{q=p->next //初始化
minp=p;
while(q)
{
if(q->datadata)
minp=q;
else
q=q->next;
}
q->data=temp;
q->data=minp->data;
minp=temp;
p=p->next;
}
}
2.实现双向冒泡排序算法
void BidBubbleSort(int array[], int n)
{
int low, high, flag, i;
low = 0;
high = n - 1;
while(low < high)
{
flag=0;
for(i=low; i<high; i++) //正向冒泡
{
if(array[i] > array[i+1]) //找到剩下中最大的
{
Swap(&array[i], &array[i+1]);
flag = 1; //标志, 有数据交换
}
}
if( !flag )
break;
high–;
for( i=high; i>low; i-- ) //反向冒泡
{
if(array[i] < array[i-1]) //找到剩下中最小的
Swap(&array[i], &array[i-1]);
}
low++;
}
}
3.借助于快速排序的算法思想,在一组无序的记录中查找给定关键字值等于key的记录。设此组记录存放于数组r[1…n].若查找成功,则返回记录在r数组中的位置
int Search(int a[],int low,int high,int key)
{
while(low<high)
{
while(low<high&&a[low]<key)low++;
while(low<high&&a[high]>key)high–;
if(r[low]==key)return low;
}
printf(“No find”);
}
4.计数排序
void CountSort(R a[],R b[])
{
for(int i=0;i<n;i++)
{
for(j=0,c=0;j<n;j++)
if(a[j].key<a[i].key)c++;
b[c]=a[i];
}
}