三种排序对比:选择法,插入法,冒泡法

三种排序对比:选择法,插入法,冒泡法html

三种排序都是最基本的,时间复杂度最大为O(n*n)的排序方法。这里给出的是采用数组形式的简单序列排序(从小到大)。数组


/*选择法*/
/*选择法的基本思路:第一次,从第一个记录后面待排序的的记录中,选出最小的,第一个交换。而后,循环作n次,这样排完后成序*/
/*选择法排序是不稳定的:由于两个相同的记录偏偏要反序放置*/
#include
int main()
{
    int a[10]={4,6,8,2,0,1,5,7,3,9};/*定义数组*/
    int i,j,k;
    for(j=0;j
      for(i=j+1;i
          if(a[i]
                        k=a[i];
                        a[i]=a[j];;
                        a[j]=k;
                        }/*用中间变量k作交换*/           
     
    for(j=0;j<=9;j++)printf("%d\n",a[j]);
    system("pause");
}
数据结构


/*冒泡法*/
/*冒泡法的基本思路选择法不一样,以下程序,第一次,经过记录的“两两”比较将全部记录中最大的记录放到最后去。而后循环9次便可*/
/*冒泡法排序是稳定的:冒泡的过程当中相同的记录位置不会变*/
#include
int main()
{
    int a[10]={4,6,8,2,0,1,5,7,3,9};
    int i,j,k;
    for(j=0;j
      for(i=0;i
          if(a[i]>a[i+1]){
                          k=a[i];
                          a[i]=a[i+1];
                          a[i+1]=k;
                          }
    for(j=0;j<=9;j++)printf("%d\n",a[j]);
    system("pause");
}htm

/*插入法*/
/*插入法的的意思就咱们抓牌同样,把记录分为有序无序两区。把无序区中的每一个数“挨个”拿来有序区的数比较。比有序区小的位置保持不变,大的话先挪动位置空出来,再插入*/
/*插入法也是稳定的:插入的过程当中相同的记录位置不变。*/
#include
int main()
{
    int a[10]={9,2,2,5,6,7,4,5,1,0},i,j,k,m;
    for(i=1;i<=9;i++)
        {
        m=a[i];                     /*将a[i]先拿出来*/
        for(j=i-1;j>=0 && mblog

/*在挪位置后要保存j的值即插入位置:j-- 。因此 循环终止条件有m ]*/
                       a[j+1]=a[j];
        a[j+1]=m; /*大的从新原位置插入,小的在挪动后的位置插入*/               
        }
    for(k=0;k<=9;k++)
    printf("%d\n",a[k]);
    system("pause");
}排序

大部分数据结构书上插入排序的写法,感受用while反而不太清楚:get

#include
int main()
{
    int i,j,k,l;
    int a[10]={4,6,8,2,0,1,5,7,3,9};
    for(i=1;i<=9;i++) /*第一个a[0]做为有序的。从第二个依次拿来比较*/
      {
        k=a[i];/*比较的数先抽出来放到中间变量k中*/
        j=i-1; /*用j作循环判断,从“右到左”依次比较!*/
        while(j>=0 && a[j]>k) /*若是比k大且不为a[-1]则挪位置*/
                   {
                    a[j+1]=a[j];
                    j--; /*j--在这里的做用值得细心领会。j在外循环中处于抽出来的记录的前一个。这里,在有序区中找到比k大的则向右边挪动位置,j这时处于比k大的那个记录的前面一个了!*/
                    }
        a[j+1]=k;    /*这时a[j+1]是挪出的空位,把k插入,若是不比k小,则插在本身原来位置*/
       }
      for(l=0;l<=9;l++)
             printf("%d\n",a[l]);
      system("pause");
}it


引用地址:http://blog.programfan.com/trackback.asp?id=30329变量

阅读全文
类别: Arithmetic  查看评论
相关文章
相关标签/搜索