交换排序算法

交换排序的基本思想是:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。

交换排序算法分为冒泡排序和快速排序

冒泡排序(Bubble Sort)是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,如果发生逆序,则进行交换,从而使关键字小的记录如气泡一般逐渐往上“漂浮”(左移)

或者使关键字大的记录如石块一样逐渐向下“坠落”(右移)。

代码

void bubbleSort(int[] list){
       for(int i=list.length-1;i>=0;i--){
              for(int j=0;j<i;j++){
                    if(list[j]>list[j+1]){
                      int flag=list[j];
                       list[j]=list[j+1];
                       list[j+1]=flag;
                }
        }
   }

 算法时间复杂度O(n^2), 空间复杂度O(1)

算法特点:

(1)稳定排序

(2)可用于链式存储结构

(3)移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时,此算法不宜采用。

快速排序

快速排序(Quick Sort)是由冒泡排序改进而得的。在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序。如果通过两个(不相邻)记录的一次交换,消除多个逆序,则会大大加快排序的速度。快速排序方法中的一次交换可能消除多个逆序。

代码:

void quickSort(int left,int right){
     int i,j,t,temp;

}

  

时间: 2024-08-04 23:18:02

交换排序算法的相关文章

【技术宅2】插入选择冒泡快速交换排序算法

//插入排序(一维数组) //插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. function insert_sort($arr){ $count=count($arr); for($i=1;$i<$count;$i++){ $tem=$arr[$i];// 获得当前值 $j=$i-1;// 获得当前值的前一个位置 while($arr[$j]>$tem){// 如果当前值小于前一

交换排序算法---冒泡排序与快速排序

本文介绍两种交换排序方法:冒泡排序.快速排序 冒泡排序 冒泡排序基本思想 每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列重复前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了.因此,复杂度在最坏的情况下是O(N ^2). 冒泡排序实现过程 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡.根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘

排序算法之交换排序

首先,上脑图. 1.为什么要学习排序算法? 这是算法学习的基础,经典的排序算法有着很广泛的用途,一遍遍的被人所使用.而且,在面试找工作的时候,数据结构中的排序算法,也是一个很重要的基本功,经常会被用人单位拿来出题目. 2.如何学习排序算法? 第一步是理解排序算法的原理,这也是最重要的一步. 第二步就是看经典的算法实现,抠细节一个个理解原理到实现经过了哪些变化. 第三部是用纸把算法实现抄一遍,这个时候会发掘出认识和实际的偏差. 第四步是把算法默写出来,这也是很重要的一步,类似于牛吃了食物之后的反刍

Python实现各种排序算法的代码示例总结

Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示例总结,其实Python是非常好的算法入门学习时的配套高级语言,需要的朋友可以参考下 在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数.<数据结构>也会花大量篇幅讲解排序.之前一段时间,由于需要,我复习了

交换排序之冒泡排序和快速排序

交换排序 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动. 排序入门之冒泡排序 冒泡排序是典型的交换排序算法.冒泡排序的时间复杂度为O(n2),可以说效率比较低,但是,冒泡排序体现的思想是学习排序算法很好的入门,尤其是对学习快速排序(在冒泡排序基础之上发展起来的)很有帮助. 基本思想 冒泡排序的基本思想是,进行(最多进行)n-1趟冒泡,其中n为数据的个数,其中每次冒泡会将未排序的最大

数据结构之——交换排序

1.交换排序算法实现 这里的交换排序指的是冒泡排序和快速排序, 其中快速排序的过程可以简单的理解为:选取序列首元素为枢轴值(pivot),然后分别从序列尾部找到第一个小于pivot的元素(A),从序列首部找到第一个大于pivot的元素(B),然后交换此A,B两元素,直至首尾遍历的两指针重合,一趟排序结束. 以下是这两算法的具体实现: 1 #include<iostream> 2 using namespace std; 3 4 //声明打印辅助函数 5 void printArray(int

python 算法

在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数.<数据结构>也会花大量篇幅讲解排序.之前一段时间,由于需要,我复习了一下排序算法,并用Python实现了各种排序算法,放在这里作为参考. 最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort(sort_lis

shell排序算法

今天看<The C Programming Language>的时候看到了shell排序算法, /* shellsort: sort v[0]...v[n-1] into increasing order */ void shellsort(int v[], int n) { int gap, i, j, temp; for (gap = n/2; gap > 0; gap /= 2) for (i = gap; i < n; i++) for (j=i-gap; j>=0

算法学习笔记

对于一个软件人员来说,算法和数据结构是无法逃避的,越是逃避说明越是需要继续学习和巩固.加深.转载一篇github上有关算法的文章,以便于进行继续学习和理解.当然并不是说非得全部掌握所有算法至少达到需要的时候会找,找到了会使,使完了能明白是什么东西才能更好的进行coding.这篇文章是有关C的 下次再弄个Java语言的算法部分.学无止境嘛,不能光看java也要学习学习C 学习方法 把所有经典算法写一遍 看算法有关源码 加入算法学习社区,相互鼓励学习 看经典书籍 刷题 原文地址:https://gi