论坛首页 综合技术论坛

各种经典排序算法总结

浏览 31092 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-29  
不错的文章,此站难得啊,辛苦lz了
0 请登录后投票
   发表时间:2011-10-31  
楼主辛苦了,收下看看
0 请登录后投票
   发表时间:2011-11-01  
受益匪浅。
0 请登录后投票
   发表时间:2011-11-02  
感谢分享啊!!!
0 请登录后投票
   发表时间:2011-11-02   最后修改:2011-11-02
第一篇文里的
void simpleSelectionSort1(int *a,int n) 
由于C中数组下标从0开始
两个for是不是应该改成

    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
     
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
        





#include<stdio.h>
void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort1(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
==========
后面的
void simpleSelectionSort2(int *a,int n)  类似
#include<stdio.h>

void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

void simpleSelectionSort2(int *a,int n) 

    int index,i; 
    if(n==1) 
        return; 
    //1.选择待排序序列a中的最小记录,其下标为index 
    for(index=i=0;i<n;i++){ 
        if(a[i]<a[index]) 
            index=i; 
    } 
    //2.最小记录与待排序序列首元素进行交换 
    if(index!=1){ 
        a[1]=a[1]+a[index]; 
        a[index]=a[1]-a[index]; 
        a[1]=a[1]-a[index]; 
    } 
    //3.待排序序列元素个数减少,递归对剩下的无序序列排序 
    simpleSelectionSort2(a+1,n-1); 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort2(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
0 请登录后投票
   发表时间:2011-11-02  
ddkk 写道
第一篇文里的
void simpleSelectionSort1(int *a,int n) 
由于C中数组下标从0开始
两个for是不是应该改成

    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
     
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
        





#include<stdio.h>
void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort1(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
==========
后面的
void simpleSelectionSort2(int *a,int n)  类似
#include<stdio.h>

void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

void simpleSelectionSort2(int *a,int n) 

    int index,i; 
    if(n==1) 
        return; 
    //1.选择待排序序列a中的最小记录,其下标为index 
    for(index=i=0;i<n;i++){ 
        if(a[i]<a[index]) 
            index=i; 
    } 
    //2.最小记录与待排序序列首元素进行交换 
    if(index!=1){ 
        a[1]=a[1]+a[index]; 
        a[index]=a[1]-a[index]; 
        a[1]=a[1]-a[index]; 
    } 
    //3.待排序序列元素个数减少,递归对剩下的无序序列排序 
    simpleSelectionSort2(a+1,n-1); 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort2(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}

文章开头有注明的
注:为了叙述方便,本文以及源代码中均不考虑A[0],默认下标从1开始。
0 请登录后投票
   发表时间:2011-11-02  
Touch_2011 写道
ddkk 写道
第一篇文里的
void simpleSelectionSort1(int *a,int n) 
由于C中数组下标从0开始
两个for是不是应该改成

    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
     
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
        





#include<stdio.h>
void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort1(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
==========
后面的
void simpleSelectionSort2(int *a,int n)  类似
#include<stdio.h>

void simpleSelectionSort1(int *a,int n) 

    int i,j,index; 
    //1.进行n-1趟选择,每次选出第i小记录 
    for(i=0;i<n-1;i++){ 
        index=i; 
        //2.选择第i小记录为a[index] 
        for(j=i+1;j<n;j++) 
            if(a[j]<a[index]) 
                index=j; 
        //3.与第i个记录交换 
        if(index!=i){ 
            a[i]=a[i]+a[index]; 
            a[index]=a[i]-a[index]; 
            a[i]=a[i]-a[index]; 
        } 
    } 
}

void simpleSelectionSort2(int *a,int n) 

    int index,i; 
    if(n==1) 
        return; 
    //1.选择待排序序列a中的最小记录,其下标为index 
    for(index=i=0;i<n;i++){ 
        if(a[i]<a[index]) 
            index=i; 
    } 
    //2.最小记录与待排序序列首元素进行交换 
    if(index!=1){ 
        a[1]=a[1]+a[index]; 
        a[index]=a[1]-a[index]; 
        a[1]=a[1]-a[index]; 
    } 
    //3.待排序序列元素个数减少,递归对剩下的无序序列排序 
    simpleSelectionSort2(a+1,n-1); 
}

int main()
{
int a[]={4,3,1,2};
simpleSelectionSort2(a,4);
for(int i=0;i<4;i++)
{
printf("%d\t",a[i]);
}
return 0;
}

文章开头有注明的
注:为了叙述方便,本文以及源代码中均不考虑A[0],默认下标从1开始。


接受指正,惯性思维了,LZ是正确的
0 请登录后投票
   发表时间:2011-11-02   最后修改:2011-11-02
算法讲求的是思想,不是实现。有了思想,不管是哪种语言,都无优劣之分。
0 请登录后投票
   发表时间:2011-11-03  
哇,好东西,有时间看一下
0 请登录后投票
   发表时间:2011-11-07  
楼主辛苦了 有时间再好好学习一下
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics