排序(交换排序)

所谓交换排序就是依次比较两个相邻元素的大小并根据需求进行交换,这里有两种交换排序。

1、冒泡排序、冒泡排序就是依次比较两个相邻数字,把两个数字中较大的放后边(这是从小到大排序,如果是降序排列,则反过来),这样一轮跑下来最大的那个数字就放到了最后,所谓冒泡就是每次都拿到当前剩余数字中最大的那个并依次放置在其应该放在的位置。这里能看出来也不需要开新空间,但是每跑一趟都需要把剩下的数字都玩儿一遍,时间效率很大,也是n平方了。

2、快速排序,调用了递归的思想,每次在序列中找到一个数字,这个数字后续处理时要求找到一个位置,在这个位置左边的数字都比他小,而右边又都比他大,然后再对左边和右边依次进行处理。

上代码。

冒泡排序不给了,比较简单,直接给快速排序。

def quickSort(numList,left,right):    if left >= right:        return    temp = numList[left]    i = left    j = right    while i != j:        while i < j and numList[j] >= temp:            j -= 1        while i < j and numList[i] <= temp:            i += 1        if i < j:            numList[i],numList[j] = numList[j],numList[i]    numList[left] = numList[i]    numList[i] = temp    quickSort(numList,left,i - 1)    quickSort(numList,i + 1,right)
if __name__ == ‘__main__‘:    numList = [32, 57, 69, 0, 2, 18, 100, 7]    quickSort(numList,0,len(numList) - 1)    print ‘快速排序‘    for x in numList:        print x,    print ‘\n‘    import random

a = []    for i in range(100):        temp = random.randint(0, 100)        while True:            for x in range(len(a)):                if a[x] == temp:                    temp = random.randint(0, 100)                    break            else:                a.append(temp)                break                # a.append(random.randint(0,100))    for item in a:        print item,    print ‘\n‘    quickSort(a,0,len(a) - 1)    for x in a:        print x,    print ‘\n‘
时间: 2024-11-05 17:34:44

排序(交换排序)的相关文章

排序 交换排序

交换排序 思想:两两比较待排序记录的关键字,发现两个记录的次序相反时,即进行交换. 冒泡排序 1).基本思想:将被排序的记录的关键字垂直排列,首先将第一个记录的关键字与第二个记录的关键字进行比较,若前者大于后者,则交换两个记录,然后比较第二个和第三个记录,以此类推,直到第n-1个记录与第n个记录的关键字比较为止.上述过程称为第一趟冒泡排序,其结果使得关键字最大的记录被安排在最后一个记录的位置上.然后进行第二趟冒牌排序,对前n-1个记录进行同样的排序,使得关键字次大的记录被安排在第n-1个记录的位

排序——交换排序

三.交换排序 ①冒泡排序 1.基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 2.实例 3.java实现 复制代码 package com.sort; //稳定 public class 冒泡排序 { public static void main(String[] args) { int[] a={49,38,65,97,76,13,

内部排序-&gt;交换排序-&gt;起泡排序

文字描述 首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(L.r[1].key>L.r[2].key),则将两个记录交换位置,然后比较第二个记录和第三个记录的关键字.依次类推,直至第n-1个记录和第n个记录的关键字进行过比较为止.上述过程称为第一趟起泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上. 整个起泡排序过程需进行k(k大于等于1且小于n)趟起泡排序,显然判别起泡排序结束的条件应该是排序过程中没有进行过交换记录的操作. 示意图 算法分析 如果待排序序列为&quo

内部排序-&gt;交换排序-&gt;快速排序

文字描述  快速排序是对起泡排序的一种改进.它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. 一趟快速排序描述:假设待排序的序列为{L.r[s], L.r[s+1], - , L.r[t]},首先任意选取一个记录(通常选第一个记录L.r[s])作为枢轴(pivot), 然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较它大的记录都安置在它

java排序-交换排序-快速排序

优化前(传统): /** * 快速排序 */ @Test public void kuaiSuTest(){ /** * 1.选择一个基点 * 2.从两边开始向基点遍历,与基点比较,大小位置不对的就互换位置 * 3.遍历结束排序完成 */ sort(data,0,data.length-1); System.out.println(Arrays.toString(data)); } public static void sort(int[] data,int low,int height){ i

JavaScript实现常用的排序算法

▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排序.希尔排序.直接选择排序 ▓▓▓▓▓▓ 交换排序 交换排序是一类在排序过程中借助于交换操作来完成排序的方法,基本思想是两两比较排序记录的关键字,如果发现两个关键字逆序,则将两个记录位置互换,重复此过程,直到该排序列中所有关键字都有序为止,接下来介绍交换排序中常见的冒泡排序和快速排序 ▓▓▓▓▓▓

排序算法总结----比较类排序

概述:排序算法可分为比较性的排序,以及运算性的排序:这里详细介绍这些排序的原理,性能,实现,以及应用场合. 前面是维基百科的介绍,这里介绍几个比较典型的算法. 理论 计算复杂性理论 大O符号 全序关系 列表 稳定性 比较排序 自适应排序 排序网络 整数排序 交换排序 冒泡排序 鸡尾酒排序 奇偶排序 梳排序 侏儒排序 快速排序 臭皮匠排序 Bogo排序 选择排序 选择排序 堆排序 Smooth排序 笛卡尔树排序 锦标赛排序 循环排序 插入排序 插入排序 希尔排序 二叉查找树排序 图书馆排序 Pat

(转)各类排序算法总结

各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1,R2,…,Rn},其相应关键字的序列是{K1,K2,…,Kn},相应的下标序列为1,2,…,n.通过排序,要求找出当前下标序列1,2,…, n 的一种排列p1,p2, …,pn,使得相应关键字满足如下的非递减(或非递增)关系,即:Kp1≤Kp2≤…≤Kpn,这样就得到一个按关键字有序的记录序列{R

6、排序——数据结构【基础篇】

排序 排序就是将一组杂乱无章的数据按一定的规律排列起来 插入排序--每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象适当位置上,直到对象全部插入为止 直接插入排序 时间复杂度: 空间复杂度: 是一种稳定的排序 二分排序 时间复杂度: 空间复杂度: 是一种稳定的排序 希尔排序 时间复杂度: 空间复杂度: 是一种不稳定的排序 交换排序--是在待排序的记录序列中,两两比较待排序记录关键字,并交换不满足要求的偶对,直到整个序列中所有记录都满足要求为止 冒泡排序 时间复杂度: 空间复

十种常见排序算法

1.常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序): (2)线性时间非比较类排序:计数排序.基数排序和桶排序. 总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反. (2)线性时间非比较类排序一般要优于