交换排序问题

如果有个数组strs,我们怎样实现将它的数据从小到大排序.

1、以前我们解决过这种问题:找到数组的最小数据

//首先假设数组的第一项就是最小的,int min=strs[0];

for(int i=0; i<strs.Length; i++)

{

  if(strs[i]>min)

  {

    //说明strs[i]是最小的项

    Console.Write("strs[i]");

  }

}

2、理解了上面这个问题,那么这道题的问题就好解决了。

重复动作:如果索引为0位置的数字比索引为j位置的数字大,就交换。

#1、j的范围(1--strs.Length-1)因为我们将第一项看做是最小的,那么我们就将后面的项与第一项比较并交换。

if(strs[0]>strs[j])

{

//交换位置

  int temp =strs[0];

  strs[0] =strs[j];

  strs[j] =temp ;

}

//上面是完成了第一项的交换,其他项的交换,我们将strs[0] 看做strs[i](i的取值范围:0---strs.Length-2),为什么是倒数第二项呢,因为,我们交换到倒数第二项了,最后一项肯定是最大的数字了,所以就不需要交换了.

for(int i=0 ; i<=strs.Length-2 ;i++)     //将比较排序问题

{

//这部分最要讲交换的问题

  for(int j=i+1 ; j <=strs.Length-1 ; j++)

  {

    if(strs[i]>strs[j])

    {

      int temp =strs[i];

      strsi] =strs[j];

      strs[j] =temp ;

     }

  }

}

时间: 2024-12-28 17:20:03

交换排序问题的相关文章

编程之美—烙饼排序问题(JAVA)

一.问题描述 星期五的晚上,一帮同事在希格玛大厦附近的"硬盘酒吧"多喝了几杯.程序员多喝了几杯之后谈什么呢?自然是算法问题.有个同事说:"我以前在餐      馆打工,顾客经常点非常多的烙饼.店里的饼大小不一,我习惯在到达顾客饭桌前,把一摞饼按照大小次序摆好--小的在上面,大的在下面.由于我      一只手托着盘子,只好用另一只手,一次抓最上面的几块饼,把它们上下颠倒个个儿,反复几次之后,这摞烙饼就排好序了.我后来想,这实际上是个     有趣的排序问题:假设有n块大小不一

详谈排序算法之交换类排序(两种方法实现快速排序【思路一致】)

1.冒泡排序    起泡排序的思想非常简单.首先,将 n 个元素中的第一个和第二个进行比较,如果两个元素的位置为逆序,则交换两个元素的位置:进而比较第二个和第三个元素关键字,如此类推,直到比较第 n-1 个元素和第 n 个元素为止:上述过程描述了起泡排序的第一趟排序过程,在第一趟排序过程中,我们将关键字最大的元素通过交换操作放到了具有 n 个元素的序列的最一个位置上.然后进行第二趟排序,在第二趟排序过程中对元素序列的前 n-1 个元素进行相同操作,其结果是将关键字次大的元素通过交换放到第 n-1

笔试算法题(33):烙饼排序问题 &amp; N!阶乘十进制末尾0的个数二进制最低1的位置

出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排序,则最少需要翻转几次,才能达到大小有序的结果(改变饼的顺序只能整体翻转,不能相邻交换): 分析: 假设饼大小编号为1,--,N,1就是最小的饼,N就是最大的饼,最大的N饼翻转到最下面之前,一定需要达到最上面,所以首先需要寻找N饼所在的位置,翻 转到最上面,然后翻转所有的饼,这样N饼就可以就位: 然

排序问题-快速排序

快速排序是在已知的排序算法中排序速度最快的,它的时间复杂度是O(NlogN),之所以特别快,只要是由于内部循环非常的精炼并且高度优化.和归并排序类似,快排也是基于分治的递归算法,将一个序列S快拍分为四步: 1.如果S中只有1个或者0个元素,则结束排序 2.在S中选取一个元素v作为快排使用的"枢轴": 3.将S中除去枢轴v的元素分成两个分别大于枢轴和小于数轴的不相交的序列: 4.分别对对小于和大于枢轴的序列进行上述的递归. 分析快排的四个步骤不难发现,一般的快排算法还有很多可以优化的地方

in-place数据交换

实现in-place的数据交换 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 经典的排序问题 问题描述 一个数组中包含两个已经排好序的子数组,设计一个in-place(原位操作)算法来对这个数组排序.测试数据为 a[] = 1 4 5 7 8 9 2 3 6 10 11 . 问题分析 排序是一个非常经典的算法设计问题,这个不是难点,难点在于设定的in-place操作,意思是所有的操作都是"就地"操作,不允许进行移动.在我的博文<排序算法

双色、三色排序问题

实现一个函数,给定一个数组,要求使得数组中负数在所有正数的前面 实现一个函数,给定一个数组,要求使得数组中负数在前正数在后零在中间 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 //输出数组元素 5 void print(int *arr, int len); 6 //交换两个数 7 void swap(int *left, int *right); 8 //将所有正数排在后面 9 void sort_two(int *arr, int

通过交换操作,调整数组元素位置

问题描述:有一个长度为N的整形数组row,由0至N-1这N个数字乱序组成(每个数组出现且仅出现一次).现在你可以对这个数组的任意两个不同的元素进行交换.问:对于一个给定的这种数组,若要把这个数组变为从小到大排好序的操作(即,对于数组的任意下标,均有 I == row[i] 成立),最少需要进行多少次交换? 首先,举几个简单的例子: 例子1: 下标 0 1 2 3 4 值 0 3 2 1 4 只需1次交换即可:把row中下标为1的元素和下标为3的元素进行交换,记为swap(row, 1, 3).

排序问题之冒泡排序

排序问题 算法问题的基础问题之一,便是排序问题: 输入:n个数的一个序列,<a1, a2,..., an>. 输出:一个排列<a1',a2', ... , an'>,满足a1' ≤ a2' ≤... ≤ an' .(输出亦可为降序,左边给出的例子为升序) 一.算法描述 这是一个非常常见的排序算法,可能在每一个人学习排序算法的过程中,第一个接触到的就是冒泡排序.可能因为过于简单,它出现在算法导论第三版的习题2-2中.这是一种流行但低效的排序算法,在排序的过程中反复交换相邻的未按次序排

如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇

前面介绍了GNS3的概念,安装,配置和使用,本篇将介绍怎么利用GNS3配置IOU从而实现使用GNS3和Cisco IOU搭建路由交换实验. 由于本篇篇幅较长,所以先过一下大纲: 1. IOU模拟环境介绍 2. IOU软件环境的准备 3. VMware虚拟机的安装.导入和配置 4. IOU镜像的上传 5. GNS3的配置 6. IOU模拟环境的实现 IOU模拟环境介绍 IOU即IOS running in Unix,最初是由思科内部人员开发来测试IOS的平台,后来流传到互联网经网友改进有了后来的W