欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

复杂代码的设计书写

程序员文章站 2022-07-10 21:08:37
...

 

先设计好思路,然后一部写,可从关键步骤写---程序先要设计好走的思路对于复杂部分才可以写出

功能组件---(函数中的代码可以按照功能组件抽象)可以打的步骤写好之后再完善,先可以一个名字代替,

设计好思路后划分功能组件一个组件一个组件的去完善代码 

对于初步设计代码中出现的问题,分析造成代码问题的根本原因,然后修改程序设计,

1,从根本原因解决  

    快速排序的思路就是从根本原因解决,由于值交换之后值的位置不能锁定---》如果值能根据比较的当前的下标关联就好---》换到的位置的下标是循环中用的下标---》

    在用现在的下标去比较--记录被比较下标移动时自动关联,交换时自动有--->反方向即可实现下标和标准值的关联----》由于一个新问题到底是低位还是高位---》由于

    比较次数的基偶性不确定---》可不可以保持一直是偶数---》基数*2---》每次遍历一次大的里有两次小的遍历第二次反方向遍历

2,对问题的弥补

 

1,以数组的第一个为基础分左右大小类

2,左右类在以各自的第一个为基础在排序分左右大小类

3,都是在一个数组上操作,基准好了就不再排了

4,下一次的位置基准是排好后的这个基准

5,换位置,一个一个和其比较小的放左边,大的放右边(按序号比不能漏)===这种思路需要记录标注位置,采用弥补的方式用另一个变量存下也可

 

如下代码是从根本的思路解决:

 

 

 private int partition(int low,int high,int pivot){

 

        while(low<high){

 

            //左右交替进行,从右边交换了一次下次就从左边交换,左右双向交替确保1,完全遍历完,2保证当下的低位始终是标准的下标

            //只往一边移动很难记录标准的最终位置

 

            while(low<high &&array[high]>=pivot){  //从右端开始扫描,定位到第一个比pivot小的元素

                high--;

            }

            swap(low,high);//只是換元素,标准元素落在swap中的高位或低位

 

            while(low<high &&array[low]<=pivot){  //从左端开始扫描,定位到第一个比pivot大的元素

                low++;

            }

            swap(low,high); //等于的时候就自己和自己交换

 

        }

        return low;

 

    }

 

 

   /**

       * 递归的快速排序

       *@param low  数组的最小下标

       *@param high  数组的最大下标

       */

      private void recursiveQuikSort(int low,int high){

             if(low>=high){

                    return;

             }else{

                    int pivot = array[low];  //以第一个元素为基准

                    int partition =partition(low,high,pivot);  //对数组进行划分,比pivot小的元素在低位段,比pivot大的元素在高位段

                   

                    display(); 

                   

                    recursiveQuikSort(low,partition-1);  //对划分后的低位段进行快速排序

                    recursiveQuikSort(partition+1,high);  //对划分后的高位段进行快速排序

             }

 

 

 

参考:

https://blog.csdn.net/u012152619/article/details/47379295

 

相关标签: 数据结构