排序算法——冒泡,简单选择排序

来源:互联网 发布:淘宝hd停止服务 编辑:程序博客网 时间:2024/06/01 10:41

1.冒泡排序

    思想:每次从0位置开始,arr[0]与arr[1]比较,大则交换,再将aa[1]与arr[2]进行比较.......一遍完成之后,最大的值一定在arr[len-1]的位置上。第二遍又从arr[0]开始,与后面相邻位置比较,直到arr[len-2]的位置结束,第三遍......直到排好序。代码如下:

    for(int i=0;i<len-1;++i)

   {

        for(int j=0;j<len-i-1;++j)

        {

              if(arr[j]<arr[j+1])

              {

                   int tmp=arr[j];

                   arr[j]=arr[j+1];

                   arr[j+1]=tmp;

              }

        }

   }

      冒泡排序算法时间复杂度为O(n2),即二次方

2.冒泡优化排序

     冒泡优化排序主要是处理几乎有序的情况,可以提高代码效率,其思想是设置一个标志,用来表示上一趟循环是否发生过交换,如果发生过,那么这趟还得再做,但如果上趟循环未发生交换,说明已经有序,不必再进行后面的多趟循环了。

       

 for(int i=0;i<len-1;++i)

   {

       int flag=0;

        for(int j=0;j<len-i-1;++j)

        {

              if(arr[j]<arr[j+1])

              {

                   int tmp=arr[j];

                   arr[j]=arr[j+1];

                   arr[j+1]=tmp;

                    flag=1;

              }

            if(flag==0)

                  break;

        }

   }

    3. 简单选择排序算法

        思想:先找出最小值,再交换。第一趟:初始化最小值min为arr[0]的0下标,将之后的每一个数都与该最小值下标所对应的数做比较,如果小于最小值数,将min赋值为当前实际最小值下标,直至找到最后一个数,如果最终找的min位置不是0,,则将最小值arr[min]与arr[0]交换,此时可以保证arr[0]的位置上的数一定是最小的数;第二趟:初始化min为1,   将之后的每一个数都与该最小值下标所对应的数做比较,如果小于最小值数,将min赋值为当前实际最小值下标,直至找到最后一个数,如果最终找的min位置不是1,此时可以保证arr[1]的位置上的数一定是剩下的所有数中最小的数;第三趟:..........直至排好序。代码如下:

      for(int i=0;i<len-1:++i)

       {

             int min=i;

             for(int j=i+1;j<len;++j)

              {

                     if(arr[min]>arr[j])

                     {

                            min=j;

                      }

              }

              if(min!=i)

              {

                      int tmp=arr[min];

                      arr[min]=arr[i];

                      arr[i]=tmp;

              }

       }

      简单选择排序算法时间复杂度为O(n2),即二次方

阅读全文
0 0