精华内容
下载资源
问答
  • 这篇文章主要介绍了php选择排序法实现...具体分析如下:选择排序法的基本思路:直接用案例来说明吧,比如有一个数组$arr = array(2,6,3,9),从大到小排序。第一次大循环:它首先假设$arr[0]为最大值,然后分别跟$ar...

    这篇文章主要介绍了php选择排序法实现数组排序的方法,实例分析了选择排序的原理与具体执行步骤,具有一定参考借鉴价值,需要的朋友可以参考下

    本文实例分析了php选择排序法实现数组排序的方法。分享给大家供大家参考。具体分析如下:

    选择排序法的基本思路:直接用案例来说明吧,比如有一个数组$arr = array(2,6,3,9),从大到小排序。

    第一次大循环:它首先假设$arr[0]为最大值,然后分别跟$arr[1]~$arr[3]进行比较,如果比较它大,则进行交换,过程是这样(2,6,3,9)---2和6比 --->(6,2,3,9)---6和3比--->(6,2,3,9)---6和9比--->(9,2,3,6)。注意,这里下标也要变化。

    第二次大循环:假设$arr[1]最大(排除了$arr[0]),分别跟$arr[2]~$arr[3]比较,过程是这样(9,2,3,6)----2和3比---->(9,3,2,6)---3和6比--->(9,6,2,3)。

    第三次大循环:假设$arr[2]最大,跟$arr[3]比较,过程是这样(9,6,2,3)---2和3比--->(9,6,3,2)

    同样的,经过 N-1 次大的循环,即可排列出来

    PHP代码如下,这里同样用函数进行的封装<?php

    function selectSort(&$arr){

    for($i=0;$i

    $max = $arr[$i];

    for($j=$i+1;$j

    if($max

    $max = $arr[$j];

    $arr[$j] = $arr[$i];

    $arr[$i] = $max;

    }

    }

    }

    return $arr;

    }

    $myarr = array(2,6,3,9);

    selectSort($myarr);

    echo "

    ";

    print_r($myarr);

    ?>

    代码分析:

    第一次大循环:

    $i=0 数组(2,6,3,9)

    $j=1,执行 2和6比:变成$arr[0]=6,$arr[1]=2,$max=6即(6,2,3,9)

    $j=2,执行 3和6比:不执行

    $j=3,执行 9和6比:变成$arr[0]=9,$arr[3]=6,$max=9即(9,2,3,6)

    第二次大循环:

    $i=1,$max=$arr[1]=2,数组(9,2,3,6)

    $j=2,执行 3和2比:变成$arr[1]=3,$arr[2]=2,$max=3即(9,3,2,6)

    $j=3,执行 6和3比:变成$arr[1]=6,$arr[3]=3,$max=6即(9,6,2,3)

    第三次大循环:

    $i=2,$max=$arr[2]=2,数组(9,6,2,3)

    $j=3,执行 3和2比:变成$max[2]=3,$arr[3]=2,$max=3即(9,6,3,2)

    总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

    相关推荐:

    展开全文
  •  选择法方法:给定存在n个元素数组,首先进行第1轮排序,在n个元素中找到最小元素值,并和第一个位置元素值交换;在第2轮排序中,在剩余元素中再次找到最小元素值,并和第二个位置元素值交换;以此类推...

    Java学习之路——for循环实现选择排序

    基本步骤为

    1. 利用for循环输入并输出数组元素的值。
    2. 利用选择法进行排序
    3. 利用for循环将排序完成的数组元素输出
        选择法方法:给定存在n个元素的数组,首先进行第1轮排序,在n个元素中找到最小的元素值,并和第一个位置的元素值交换;在第2轮排序中,在剩余的元素中再次找到最小的元素值,并和第二个位置的元素值交换;以此类推,直到剩余两个数值时,选取数值中的最小值放在倒数第二个位置上,较大值放在数组中最后一个位置上。至此,选择排序结束。

    例如:数组 int[] arr={6,3,9,2,8,4};

    第一趟排序: 原始数据:6 3 9 2 8 4

    最小数据2,把2放在首位,也就是2和6互换位置,

    排序结果:2 3 9 6 8 4

    第二趟排序:

    第2以外的数据{3 9 6 8 4进行比较,3最小,放在第2位

    排序结果:2 3 9 6 8 4

    第三趟排序:

    除2、3以外的数据{9 6 8 4}进行比较,4最小,9和4交换

    排序结果:2 3 4 6 8 9

    第四趟排序:

    除第2、3、4以外的其他数据{6 8 9}进行比较,6最小,放在第四位

    排序结果:2 3 4 6 8 9

    第五趟排序:

    除第2、3、4、6以外的其他数据{8 9}进行比较,8最小,8放在第五位

    排序结果:1 2 4 5 8 9
      当数组共n个元素时,需要选择n-1次。

    public static void main(String[] args) {
    		int[] arr = {6,3,9,2,8,4};
    		//输出排序前的数组
    		System.out.println("排序前数组为");
    		for(int num:arr) {
    			System.out.println(num);
    		}
    		//排序方法
    		for(int i = 0;i<arr.length;i++) {//外层循环控制循环轮数
    			int k = i;	//保存i的值,使用k进行循环
    			for(int j=k+1;j<arr.length;j++) {//选去元素中最小的元素
    				if(arr[j]<arr[k]) {//如果后一个元素比前一个元素小时
    					k = j;//记录当前最小值的位置
    				}
    			}
    			if(i!=k) {//交换最小值与数组元素
    				int temp = arr[i];
    				arr[i] = arr[k];
    				arr[k] = temp;
    			}
    		}
    		//输出排序完成后的数组
    		System.out.println("排序后数组:");
    		for(int num:arr) {
    			System.out.println(num);
    		}
    	}
    
    展开全文
  • 数据结构 - 简单选择排序法在之前的博文里已经介绍过排序的两个基本方法:双重循环法和冒泡排序法。基本思想其实上面两种方法的基本思想都是一样...这次介绍的简单选择法的本质也和上面两种方法一样的。冒泡(or 双层循

    数据结构 - 简单选择排序法

    在之前的博文里已经介绍过排序的两个基本方法:

    双重循环法和冒泡排序法。

    基本思想

    其实上面两种方法的基本思想都是一样的:

    就是将排序步骤分成两层循环, 在内层的每1个循环中, 找出剩下未排序成员最小(大)的1个, 并将其放到队伍前列。

    只不过, 冒泡排序法的元素交换更具效率, 通常情况下会比双重循环法更快完成排序。

    这次介绍的简单选择法的本质也和上面两种方法一样的。

    冒泡(or 双层循环)排序法每1个内层循环中, 会通过多次元素交换, 最终最小(大)的未排序元素会被移动到队伍前列。

    而简单选择法就是定1个最小变量, 在1个内层循环中, 通过比较(而不是元素交换)得到未排序的最小(最大)元素的位置。然后才1次过把这个元素移动到前列。

    简单选择排序法 代码

    如果你看懂上面写的是什么, 代码是很容易写出来的。

    int simpleSelectionSort(int * arr, int len){
        int i,j;
        int min;
    
        for (i = 0; i < len -1; i++){
            min = i; //first make the first element to be the min
            for (j = i+1; j < len; j++){
                if (arr[j] < arr[min]){
                    min = j;
                }
            }
    
            //then the arr[j] is the min element in the loop
            if (i != min){
                _swap(arr, i, min);
            }
        }
    
    }
    

    代码分析

    上面代码很简单, 在每1个内循环中, 我们会用min这个变量来存储最小的元素位置。
    然后用未排序元素来跟min位置元素比较…

    debug信息:

    4, 1, 5, 8, 0, 3, 7, 9, 6, 2
    step 0: changed: *0, 1, 5, 8, *4, 3, 7, 9, 6, 2
    0, *1, 5, 8, 4, 3, 7, 9, 6, 2
    step 1: changed: 0, 1, *2, 8, 4, 3, 7, 9, 6, *5
    step 2: changed: 0, 1, 2, *3, 4, *8, 7, 9, 6, 5
    0, 1, 2, 3, *4, 8, 7, 9, 6, 5
    step 3: changed: 0, 1, 2, 3, 4, *5, 7, 9, 6, *8
    step 4: changed: 0, 1, 2, 3, 4, 5, *6, 9, *7, 8
    step 5: changed: 0, 1, 2, 3, 4, 5, 6, *7, *9, 8
    step 6: changed: 0, 1, 2, 3, 4, 5, 6, 7, *8, *9
    change count: 7
    compare count: 45
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9

    可以见到这个简单选择排序方法不能减少比较次数, 但是大大减少了元素交换的次数。
    简单选择排序法的时间复杂度仍然是O(n2)

    小结

    其实本文一开始提到的博文中提到, 冒泡排序法通过优化是能够元素比较次数的。

    如果你的排序元素交换的开销比比较开销大得多的话,这个简单排序法是可以考虑的.

    展开全文
  • 然后在剩下数当中再找最小与第二个位置数交换,如此循环到倒数第二个数和最后一个数比较为止。 二、排序步骤: 以从小到大进行排序为例: 数组里面有4个元素: len = 4 a[0] = 10 a[1] = 1 a[2] = 20 a[3] = 5...

    简单选择排序是指一种排序算法,在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。

    一、基本思想

    在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

    二、排序步骤:

    以从小到大进行排序为例:
    数组里面有4个元素: len = 4
    a[0] = 10
    a[1] = 1
    a[2] = 20
    a[3] = 5

    1.第0轮选择最小数放到a[0]:

    将a[0]与a[1]比较,a[1]<a[0],交换,此时 a[0] = 1,a[1] = 10,a[2] = 20,a[3] = 5
    将a[0]与a[2]比较,a[2]>a[0],不交换
    将a[0]与a[3]比较,a[3]>a[0],不交换
    最终 a[0] = 1,a[1] = 10,a[2] = 20,a[3] = 5
    得到最小数a[0] = 1

    2.第1轮选择次最小数放到a[1]

    将a[1]与a[2],a[2]>a[1],不交换
    将a[1]与a[3]比较,a[3]<a[1],交换,此时 a[1] = 5,a[2] = 20,a[3] = 10
    最终a[1] = 5,a[2] = 20,a[3] = 10
    得到次最小数a[1] = 5

    3.第2轮选择第三小数放到a[2]
    将a[2]与a[3]比较,a[3]<a[2],交换,此时 a[2] = 10,a[3] = 20
    最终a[2] = 10,a[3] = 20
    得到第三最小数a[2] = 10

    4.最后一个数自动为最大数
    得到最大数a[3] = 20

    完成排序 a[0] = 1,a[1] = 5,a[2] = 10,a[3] = 20

    三、两个循环i j 确定:

                             //当i=0时,a[0]要与a[1] a[2] a[3] 比较.........
    for(i=0;i<len-1;i++){....}
    for(j=i+1;j<len;j++){.....}
    

    四、编程实现:

    #include <stdio.h>
    
    void sort(int arry[],int len)
    { 
         int i,j,tmp;
         
         for(i=0;i<len-1;i++){
             for(j=i+1;j<len;j++){
                  if(arry[i]>arry[j]){
                     tmp = arry[i];
                     arry[i] = arry[j];
                     arry[j] = tmp;              
                  }         
             }     
         
         }  
    }
    
    int main()
    {   
        int m;
    	int arry[4] = {10,1,20,5};
        int len = sizeof(arry)/sizeof(arry[0]);
        
        sort(arry,len);        
        
        for(m=0;m<len;m++){
             printf("%d ",arry[m]);    
        }    
        
        putchar('\n');    
    	return 0;
    }
    
    
    展开全文
  • 选择排序法的排序思想:假设有n个需要排序的数据,排序步骤如下 step1:选择第一个数据作为比较对象,将它与它后面的(n-1)个数据进行比较,选择最大/最小的那个数据与第一个做交换。第一次内层循环结束。总比较...
  • 从一组元素中选择最小数,如果它不是第一个元素,则与这组元素中第一个元素对调,在剩下元素中重复上述步骤,直到剩下一个元素为止。 /* * 数组排序算法 * 1、冒泡 * 2、直接选择排序 * 计划更新: * 3、...
  • 一、选择排序 原理:第一次从待排序数据元素中选出最小(或最大)一个元素,存放在序列起始位置,然后再从剩余未排序元素中寻找到最小(大)元素,然后放到已...由上述步骤可看出利用for循环的嵌套即可实现
  • Java学习之路——冒泡排序与选择排序 基本步骤为: 利用for循环输入并输出数组各个元素值 利用冒泡法(选择法)进行排序 利用for循环将排序完成数组元素进行输出 ...
  • java笔记数组一维数组使用增强for循环遍历一维素组经典冒泡排序二维数组Arrays类应用将所有元素赋相同值查询元素在数组中下标 数组 一维数组 **定义:**数组是用来存储一组相同类型数据数据结构 注意:数组...
  • CRC循环冗余校验码

    2020-11-02 23:15:37
    1、CRC CRC循环冗余校验码是数据通信中的一种查错校验码。 循环冗余检查对数据进行多项式计算,将计算...3.CRC校验的步骤 (1)选择一个生成多项式,作为对接收的帧进行除运算时的除数,生成多项式可以写为二进制形式
  • 1.为什么选择循环链表:因为有很多生活中结构是循环的,是单链表解决不了,比如星期、月份、24小时,对于这些循环的数据,循环链表就体现出它优势了。 2.循环链表结构: 循环链表就是从头结点后面开始,尾...
  • 堆排序 关于堆内容我们已经...堆排序属于一种选择排序: 步骤如下: 把待排序数据构建成大顶堆(从大到小排序)。 把堆顶数据拿出放在数组第一个元素中。 使用下沉方法整理堆中数据。 循环第...
  • 选择排序

    2021-02-18 14:30:49
    1.和插入排序和冒泡排序一样,选择排序也将数组分为已排序和未排序两部分。 主要步骤: 重复n-1次下述操作 1.找出未排序部分最小值minj; 2.将minj位置元素和未排序起始元素交换 主要变量: i:循环变量,...
  • (5)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (6)在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进称对列的...
  • 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码一种散列函数,主要用来检测或校验数据传输或者保存后可能出现错误。它是利用除及余数原理来作...
  • 文章目录一、分治算法基本步骤二、分治算法解决汉诺塔问题2.1 汉诺塔规则:2.2 使用分治算法 笔记参考:尚硅谷 分治就是把很复杂问题分而治之,把一个很大问题分成几个很小问题,再把这几个很小问题...
  • 在3和6上标识循环节,这里介绍两种不同方法: <br /> 一、插入公式 <br /> Word 2007公式组件十分强大,我们可以通过插入公式方法实现循环效果,具体步骤如下: <br /> 第1步:正常...
  • 知识普及:反向最大匹配法的基本原理与正向最大匹配法类似,只是分词顺序变为从右至左。 步骤 1,一般从一个字符串的结束位置,选择一个最大长度的词长的片段,如果序列不足最大词长,则选择全部序列。 2,首先看该...
  • 脱壳单步

    2017-04-17 15:18:41
    单步跟踪法的步骤 (1)用OD载入,点“不分析代码” (2).单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现(通过F4) (3)遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,...
  • (5) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。 (6) 在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进称对列...
  • Java学习之路——for循环实现冒泡排序基本步骤为:利用for循环输入并输出数组各个元素值利用冒泡法(选择法)进行排序利用for循环将排序完成数组元素进行输出冒泡法方法:冒泡排序采取从头至尾以此比较相邻两个...
  • 都是我以前总结笔记,步骤是照着书上打的,书上总结很全了。...3.遇到程序往上跳转时候(包括循环),在回跳下一句代码上单击并按键盘上“F4”键跳过回跳指令。 4.OD中绿色线条表示...
  • 两种方法:目录选择法和AID列表法 1.目录选择法: a.终端发送选择’1PAY.SYS.FFD01’文件命令,ICC返回数据包含短文件标识符(tag’88’) b.根据短文件标识符终端循环发送读记录命令,直至ICC返回
  • (6) 若就绪队列不为空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。 (7) 在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
  • (6)若就绪队列不为空,则重复上述的步骤(4)和(5)直到所有进程都运行完为止。 (7)在所设计的调度程序中,应包含显示或打印语句,以便显示或打印每次选中进程的名称及运行一次后队列的变化情况。
  • 单步跟踪法的步骤 (1)用OD载入,点“不分析代码” (2).单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现(通过F4) (3)遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码...
  • 完全背包和01背包的题目很相似,优化处理后,代码也很相似,但是其中蕴含的道理大相径庭。 相似体现在:01背包优化后,第二重循环的 j 由从大到小改为从小到大之后,就能直接应用AC。...完全背包的步骤

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 206
精华内容 82
关键字:

循环选择法的步骤