首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

算法的一些当心得

2013-04-05 
算法的一些小心得1、插入排序#includestdio.hvoid insort(int a[],int n){int i,jfor(i2ini){ji-1

算法的一些小心得

1、插入排序

#include<stdio.h>
void insort(int a[],int n)
{
    int i,j;
    for(i=2;i<=n;i++)
    {
        j=i-1;
        a[0]=a[i];
        while(a[0]<a[j])
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=a[0];
    }
}
void main()
{
    int a[11];
    int i;
    for(i=1;i<=10;i++)
        scanf("%d",&a[i]);
    insort(a,10);
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);
}


2、快速排序

#include <stdio.h>
int partions(int l[],int low,int high)
{
    int prvotkey=l[low];
    l[0]=l[low];
    while (low<high)
    {
        while (low<high&&l[high]>=prvotkey)
            --high;
        l[low]=l[high];
        while (low<high&&l[low]<=prvotkey)
            ++low;
        l[high]=l[low];
}

    l[low]=l[0];
    return low;
}

void qsort(int l[],int low,int high)
{
    int prvotloc;
    if(low<high)
    {
        prvotloc=partions(l,low,high);    //将第一次排序的结果作为枢轴
        qsort(l,low,prvotloc-1); //递归调用排序 由low 到prvotloc-1
        qsort(l,prvotloc+1,high); //递归调用排序 由 prvotloc+1到 high
    }
}
void quicksort(int l[],int n)
{
    qsort(l,1,n); //第一个作为枢轴 ,从第一个排到第n个
}
void main()
{
    int a[11]={0,2,32,43,23,45,36,57,14,27,39};
    int b,c;
    for (b=1;b<11;b++)
    printf("%3d",a[b]);
    printf("\n");
    quicksort(a,11);
    for(c=1;c<11;c++)
    printf("%3d",a[c]);
}

3、归并排序

int is1[n],is2[n];// 原数组is1,临时空间数组is2,n为个人指定长度
void mergeSort(int a,int b)// 下标,例如数组int is[5],全部排序的调用为mergeSort(0,4)
{
if(a<b)
{
int mid=(a+b)/2;
mergeSort(a,mid);
mergeSort(mid+1,b);
merge(a,mid,b);
}
}
void merge(int low,int mid,int high)
{
int i=low,j=mid+1,k=low;
while(i<=mid&&j<=high)
if(is1[i]<=is1[j]) // 此处为排序顺序的关键,用小于表示从小到大排序
is2[k++]=is1[i++];
else
is2[k++]=is1[j++];
while(i<=mid)
is2[k++]=is1[i++];
while(j<=high)
is2[k++]=is1[j++];
for(i=low;i<=high;i++)// 写回原数组
is1[i]=is2[i];
}

2楼wkupaochuan昨天 21:09
不错。
1楼aoxiangzhiguanjun昨天 16:47
呵呵,互相学习

热点排行