排序算法之二-选择排序和插入排序

来源:互联网 发布:编程用什么配置的电脑 编辑:程序博客网 时间:2024/06/01 10:45

 二、选择排序

        也是一种容易理解的排序,基本思想是,对要排序的在n个元素,每一次都是从待排序的元素中,选出最小(或最大)的一个,按选择顺序,将选择出来的数,顺序放在已排好序的元素序列的最后,直到全部待排序的数据元素排完。

下面以以下面数据为例,将其从小到大排序。说明排序过程:

        初始关键字       [49 39 65 98 67 22 29 49]

        第一趟排序:  22 [39 65 98 67 49 29 49]

        第二趟排序:  22 29 [65 98 67 49 39 49]

        第三趟排序:  22 29 39 [98 67 49 65 49]

        第四趟排序:  22 29 39 49 [67 98 65 49 ]

        第五趟排序:  22 29 39 49 49 [98 65 67]

        第六趟排序: 22 29 39 49 49 65 [98 67]

        第七趟排序:  22 29 39 49 49 65 67 [98]

       最后排序结果:  22 29 39 49 49 65 67 98

 下面是伪码算法:

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

    {   min_index=i; 

         for(intj=i+1;j<n;j++)       //每次扫描选择最小项 

           if(arr[j]<arr[min_index])  min_index=j; 

           if(min_index!=i)    //将最小项移到列表中的正确位置 

           {   int tp; 

              tp=arr[i]; arr[i]=arr[min_index];arr[min_index]=tp; 

 作业思考:设计程序,从键盘随机输入10个整数,然后从小到大输出。请输出整个排序过程各步数据序列。

 

三.插入排序

        插入排序法字面解释是将等排的数目插入它应该该占据的位置。所谓插入排序法,就是每次检查第i个数字,如果在它的左边的数字比它大或小,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小或大,就可以停止。下面举例说明。

 原数据序列:【6,1,5,2,3 】//从第二个数字1开始,1和前面6比较后,得出下面数列

                         【1,6,5,2,3 】//第三个数字5和前面6、1比较后,得出下面数列

                         【1,5,6,2,3 】//第四个数字2和前面6、5、1比较后,得出下面数列

                         【1,2,5,6,3 】//第五个数字3和前面6、5、2比较后,得出下面数列

                         【1,2,3,5,6 】

下面是伪码算法:

for(int i=1;i<n;i++)       //从第1个数组元素开始,arr[0]作为最初已排序部分 

{ int tp=arr[i];          //tp标记为未排序第一个元素 

   int j=i-1; 

  while (j>=0 &&arr[j]>tp) //寻找tmp应插入的位置 

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

     j--;

 }

 arr[j+1]=temp; 

}

 作业思考:设计程序,从键盘随机输入10个整数,使用插入排序将其从小到大输出。请输出整个排序过程各步数据序列。


0 0
原创粉丝点击