用7次比较完成5个元素的排序

7次比较完成5个元素的排序:

有五个数字,[a, b, c, d, e],进行排序。以下排序均按从小到大进行排序:

1)       将a与b进行排序,排序结果为[a’, b’],共用1次比较,累计1次比较;

2)       将c与d进行排序,排序结果为[c’, d’],共用1次比较,累计2次比较;

3)       将a’与c’进行比较,若a’ < c’,则a’ < c’ < d’,同时a’ < b’;否则 c’ < a’ < b’,同时c’ < d’。共用1次比较,累计3次比较。将未排入序列的数字记为x;

4)       将e向已排序的三个元素中进行插入,最大需2次比较,累计5次比较;

5)       将x将向序列中进行排序。由于已知x比序列序列中一个元素要大,所以x一定比当前序列中最左值要大,所以最多还要和三个元素进行比较,需要2次比较,累计7次比较。

程序代码如下所示:

#! /usr/bin/python

import random

nums = random.sample(range(1, 100), 5)

print "Generate ", nums

# step 1
if nums[0] > nums[1]:
    tmp = nums[1]
    nums.remove(tmp)
    nums.insert(0, tmp)

# step 2
if nums[2] > nums[3]:
    tmp = nums[3]
    nums.remove(tmp)
    nums.insert(2, tmp)

# step 3
save_num = 0
if nums[0] < nums[2]:
    save_num = nums[1]
else:
    save_num = nums[3]
    tmp = nums[2]
    nums.remove(tmp)
    nums.insert(0,tmp) 

nums.remove(save_num)

# step 4
tmp = nums[3]
nums.remove(tmp)
if tmp < nums[1]:
    if tmp < nums[0]:
        nums.insert(0, tmp)
    else:
        nums.insert(1, tmp)
else:
    if tmp < nums[2]:
        nums.insert(2, tmp)
    else:
        nums.insert(3, tmp)

# step 5
if save_num < nums[2]:
    if save_num < nums[1]:
        nums.insert(1, save_num)
    else:
        nums.insert(2, save_num)
else:
    if save_num < nums[3]:
        nums.insert(3, save_num)
    else:
        nums.insert(4, save_num)

# Last list
print "Final ", nums
时间: 2024-10-03 13:10:06

用7次比较完成5个元素的排序的相关文章

qsort 函数的使用——对普通数组、指针数组、二维数组中的元素进行排序

在ANSI C中,qsort函数的原型是 #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)); 解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素.这个数组的元素个数由size指定. compar函数对qsort的比较操作进行定义,所以可以定制数字的比较,字符串的比较,甚至结构体

树状数组模拟3个元素的排序 Codeforces 12D Ball

http://codeforces.com/problemset/problem/12/d Ball time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output N ladies attend the ball in the King's palace. Every lady can be described with three val

使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现

进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解. 问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序. 下面是我写的代码: /* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函数 */ #include<stdio.h> #include<stdlib.h> #include<

随机获取数组元素 和 数组元素随机排序

<script type="text/javascript"> //随机取得数组中的一个元素 function Rand(){ var arr=[11,22,33,44]; var a=Math.floor(Math.random()*arr.length);//Math.floor(Math.random()); //Math.floor()方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数. //alert(Math.random()*arr.

js对数组元素大小排序实例代码

js对数组元素大小排序实例代码:在实际应用中,有时候需要对数组中的元素按照大小来进行排序,当然是先排序的方法有多种,比如使用数组对象自带的sort()方法,本章节再来分享一种其他的方式,先看代码实例: var org=[5,4,3,2,1,6,7,9,8,10]; var tempArr=new Array(); for(var i=0;i<org.length;i++) { if(i==0) { tempArr[0]=org[0]; //把第一个元素放到新序列 } else { for(var

c# 逆转数组元素的排序

c#中逆转数组元素的排序实例代码如下: private string[] G_str_array;//定义字符串数组字段 private void Frm_Main_Load(object sender, EventArgs e) { G_str_array = new string[] {"C#-1","C#-2","C#-3","C#-4","C#-5"};//为字符串数组字段赋值 foreach (s

jQuery.sort对DOM元素进行排序

实例: 每个tr的第三列显示的都是数字,我们就以这数字列作为排序依据,方法就是利用jquery的sort()方法. 首先,利用jquery选择器获取每个tr元素,获取回来是一个数据: var $trs = $('#dataTable_table tbody tr'); 然后通过调用jquery的sort()方法进行排序,sort()方法接收的参数是一个方法,该方法就是实现排序的逻辑: $trs.sort(function(a,b){ var valveNumOfa = $(a).find('td

js数组元素由小到大排序实例代码

js数组元素由小到大排序实例代码:有时候需要对数组中的数字进行排序,下面是一段将数组中数字由小到大排序的代码实例,希望能够帮到大家.实例代码如下: var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98]; var len=arr.length; console.log(arr.join(",")); var newarr=[]; for(var i=0;i<len;i++){ newarr.push(Math.min.apply(nu

让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出

题目: 让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出 (1)方法1 方法1:先将数组元素原先的对应位置记录在另一个数组中       并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值 /* 选择法排序 并在排序后的数组元素在原先数组的对应位置输出 方法1:先将数组元素原先的对应位置记录在另一个数组中 并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值 */ #include <iostream> using name

C实现数组中元素的排序

使用C实现数组中元素的排序,使得数组中的元素从小到大排列.只不过在这个过程中出了一点小问题,在C中进行数字交换的时候,必须要使用指针的,不能使用引用.在后面的文章中,我要学习一个在C中的引用和指针的区别.下面看一下我的代码吧. #include <stdio.h> void swap(int *a,int *b); void rest(int lels[],int count); /** * 该实例用于实现对用户输入的数组进行排序 * 要求的数组中的元素从小到大来咧 * * @brief ma