冒泡、插入、选择--三种排序

一、冒泡排序
算法思路:两两比较相邻记录之间关键字,如果反序则交换,直到没有反序的记录为止。
具体代码:

import random

data=[]
n=int(raw_input())
for re in range(0,n):
    a=random.randint(1,1000)
    data.append(a)
    # data[re] = a
print data
for i in range(0,n):
    for j in range(i+1,n):
        if data[i] >= data[j]:
            temp =data[j]
            data[j]=data[i]
            data[i]=temp
print data
sum = 1
for i in range(0,len(data)-1):
    if data[i]>data[i+1]:
        sum = 0
        break
if sum == 1:
    print 'TRUE'
else:
    print 'FALSE'

输出效果:

9
[682, 494, 706, 113, 928, 600, 639, 111, 119]
[111, 113, 119, 494, 600, 639, 682, 706, 928]
TRUE

二、插入排序
算法思路:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表包含一个元素,无序表中包含n-1个元素。排序过程就是每次从无序表中取出一个元素,将其插入到有序表中的合适位置,使之成为新的有序表,重复n-1次即可完成排序过程。排序过程类似打扑克牌时整理手中牌的过程。
具体代码:

import random

n = int(raw_input())
a = []
for re in range(n):
    b=random.randint(1,n*n)
    a.append(b)
print a
for i in range(0,len(a)):
    x = a[i]
    j=i-1
    while j>=0 and a[j]>x :
        a[j+1]=a[j]
        j=j-1
    a[j+1]=x
print a
temp = 1
for i in range (0,len(a)-1):
    if a[i]>a[i+1]:
        temp = 0
        break
if temp == 1:
    print 'TRUE'
else:
    print 'FALSE'

输出效果:

8
[24, 44, 6, 61, 50, 20, 51, 9]
[6, 9, 20, 24, 44, 50, 51, 61]
TRUE```

三、选择排序:
算法思路:首先,找到数组中最小的那个元素;其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换);再次,在剩下的元素中找到最小的元素。将它与第二个元素交换位置。如此往复,直到将整个数组排序。
代码实现:

import random
s = []
n = int (raw_input())
for i in range(n):
    b = random.randint(1,n*n)
    s.append(b)
print s
for i in range(0,len(s)-1):
    index = i
    for j in range(i+1,len(s)):
        if s[j]<s[index]:
            index = j
    temp = s[i]
    s[i] = s[index]
    s[index] = temp
print s
sum = 1
for i in range(0,len(s)-1):
    if s[i] > s[i+1]:
        sum = 0
        break
if sum == 1:
    print 'TRUE'
else:
    print 'FALSE'

输出结果:

8
[56, 22, 25, 51, 64, 11, 12, 20]
[11, 12, 20, 22, 25, 51, 56, 64]
TRUE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值