选择法排序

function SelectSort($arr) {
  // 获得数组总长度
  $num = count($arr);
  // 遍历数组
  for ($i = 0;$i < $num-1; $i++) {
    // 暂存当前值
    $iTemp = $arr[$i];
    // 暂存当前位置
    $iPos = $i;
    // 遍历当前位置以后的数据
    for ($j = $i + 1;$j < $num; $j++){
      // 如果有小于当前值的
      if ($arr[$j] < $iTemp) {
      // 暂存最小值
      $iTemp = $arr[$j];
      // 暂存位置
      $iPos = $j;
      }
    }
    // 把当前值放到算好的位置
    $arr[$iPos] = $arr[$i];
    // 把当前值换成算好的值
    $arr[$i] = $iTemp;
  }
  return $arr;
}

原文地址:https://www.cnblogs.com/zhang0807/p/10329950.html

时间: 2024-10-03 23:03:54

选择法排序的相关文章

选择法排序/冒泡排序法/交换排序法

这不是个新鲜的话题,是自己之前一直理解错了. int a[10] ={2,4,1,0,9,5,7,6,8,3}; 选择法排序: 第一次循环.a[0] 比较所有的的元素,最小的,跟a0交换 第二次循环,找到剩下的最小的,跟a1 交换 冒泡排序, 也是两层循环 ,  是 1-9, 在内层循环里,是从后往前,这样,一次把最小的一步一步的换到最前来, 比如 a8和a9比较,然后 a7和a8比较,依次.. 说白了,这两种排序,大同小异,时间复杂度是一样的. 交换排序法: 1次循环,跟a0比较,遇到小的,就

OJ刷题之《选择法排序》

题目描述 用选择法对10个整数从小到大排序. 输入 10个整数 输出 排序好的10个整数 样例输入 4 85 3 234 45 345 345 122 30 12 样例输出 3 4 12 30 45 85 122 234 345 345 代码如下: #include <iostream> using namespace std; int main() { int i,j,min,temp,a[11]; for (i=0; i<10; i++) { cin>>a[i]; } f

TIA博途SCL编程学习_选择法排序

用数组定义20个元素,给定20个实数,按从大到小排列.2. 添加FB块,建立变量.如下图: 3. 编写程序.如下图:4. 调用并监控.如下图:5.置1变量enable,监控变量表6.如果你也是博途热爱者,就一起学习吧

选择法和冒泡法排序接口

#define ret_ok 0 #define ret_err 1 #define ARRAY_SIZE 10 /*选择法排序*/ int Choice_Sort(int array[],int array_len) { int i = 0; int j = 0; int iMin = 0; int iTemp = 0; int iFlag = 0; for(i=0;i<array_len-1;i++) { iMin = i; for(j=i+1;j<array_len;j++) { if(

冒泡法、选择法、插入法、二分法

小序 排序是非常重要且很常用的一种操作,有冒泡排序.选择排序.插入排序.希尔排序.快速排序.堆排序等多种方法.这里我们先简单介绍前三种排序算法和代码的实现,其余算法将在后续课程<数据结构>中学习到.算法只是一种思想,其实现依赖于数据结构,所以这里提取出一些典型的算法和数据结构,包括排序以及链表/堆栈/队列等结构的操作. ------------------------------------------------------ 冒泡法排序 数组中有N个整数,用冒泡法将他们从小到大(或从大到小)

排序 - 选择法

选择法 基本思想, 每一趟 (例如第 i 趟,i = 0, 1, -,n-2)在后面 n-i个待排的数据元素中选出关键字 最小的元素, 作为有序元素序列的第 i 个元素. 排序过程 首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换: 再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换: 重复上述操作,共进行n-1趟排序后,排序结束. 代码: #include <iostream> #include <cstdio>

算法学习01:二分查询,选择法、插入法、分治法排序

查询与排序是使用的再频繁不过的两个功能,算法学习系列实现语言为C#. 一般情况下的查询 Int32 Search(Int32[] source, Int32 task) { var index = 0; while (index < source.Length) if (source[index++] == task) return index - 1; //返回值为Length则说明未找到 return source.Length; } 时间复杂度为O(n),在检索源没有排序的情况下,这即为最

排序算法(交换法,选择法,插入排序,冒泡法,快速排序算法,C语言举例)

交换法:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动. 简单选择排序:的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕. 插入排序法:有一个已经有序的

C语言常见的排序方法——冒泡法、选择法、插入法

当我们要对C中一组数据进行排序是常见的排序方法有冒泡法.选择法.插入法 冒泡排序法(升序):假设一组数据a[0].a[1].a[2].a[3]...a[n],第一轮:先比较a[0]与a[1].a[1]与a[2]...a[i]与a[i+1]...a[n-1]与a[n]的大小,如果a[i]与a[i+1]不是升序(即a[i] > a[i+1]),那么就将a[i]与a[i+1]的值互换,第一轮过后,a[n]就是最大值:第二轮:运用第一轮同样的方法,比较a[0]与a[1].a[1]与a[2]...a[i]