简单排序的俩种思想——冒泡法和选择排序法

冒泡法:

基本思想:每次将相邻的两个数比较,将小的调到前头(即为升序排列)。首先比较第一和第二两个数,小的调到前头,再将比完后的第二个数与第三个数比较,同理小的调到前头。如此比较下去。假设有6个数参与排序,则第一趟两两之间共比较5次,第一趟比完之后最大的数已经到底。然后进行第二趟比较,两两之间共比较4次,将次大数调到倒数第二个数的位置。共需比较5趟,5趟比完之后呈现升序排列。

总结规律:如果有n个数,则要进行n-1趟比较。在第一趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次比较。

升序:大的往下落,小的往上冒;降序:小的往下落,大的往上冒。

实现代码:

选择排序法:

基本思想(引自百度百科):第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。

以下为简单选择排序的存储状态,其中大括号内为无序区,大括号外为有序序列:

初始序列:49 27 65 97 76 12 38 }

第1趟:12与49交换:12 { 27 65 97 76 49 38 }

第2趟:27不动 :12 27 { 65 97 76 49 38 }

第3趟:65与38交换:12 27 38 { 97 76 49 65 }

第4趟:97与49交换:12 27 38 49 { 76 97 65 }

第5趟:76与65交换:12 27 38 49 65 { 97 76 }

第6趟:97与76交换:12 27 38 49 65 76 97 完成

规律总结:如果有n个数参与排序,共需比较n趟,第一趟从n个数中选出最小记录数保存在r[0]中,第j趟从n-j+1个数中选出最小记录数保存在r[j-1]中。

实现代码:

时间: 2024-11-05 16:27:56

简单排序的俩种思想——冒泡法和选择排序法的相关文章

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

冒泡法和选择排序法(比较容易写混)

1 #include<stdio.h> 2 3 4 //冒泡排序法 5 6 void bubbling(int a[],int n); 7 8 //选择排序法 9 void choose(int a[],int n); 10 int main() 11 { 12 int i; 13 int s[6]; 14 printf("please enter five numbers:\n"); 15 for(i=1;i<6;i++) 16 { 17 scanf("%

排序算法(三)冒泡、选择排序的Python实现及算法优化详解

说在前面 最近一年太忙,博客长草了.近日用Python实现了常用排序算法,供大家参考. Java版本排序算法及优化,请看以前的文章. <排序算法之简单排序(冒泡.选择.插入)> <排序算法(二)堆排序> 1.排序概念 这里不再赘述,请参看前面2篇文章 2.简单排序之冒泡法Python实现及优化 原理图 2.1.基本实现 num_list = [     [1, 9, 8, 5, 6, 7, 4, 3, 2],     [1, 2, 3, 4, 5, 6, 7, 8, 9] ] nu

Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这

一招教你搞定c语言中冒泡和选择排序

一.选择排序 很多学习C语言的同学都被这两种排序而难倒.每次拿到这样一组数字就不知道从何下手了,要不就是那些运用的不太熟悉,每次写起代码来又得花一大半时间让费在这排序上,总是找不到一种好的办法去学习它.那么接下来,我将我所学到的排序方法分享给大家,告诉你们以后遇到这种排序千万不能急.当然,很多企业面试的时候种排序也是必考的,所以我们务必要把他们搞懂,不能让这么小小的排序阻挡了我们前进的步伐.好了,那我们来看看吧! 我选择的方法是函数调用的方法,将排序的具体方式通过函数调用到main函数中执行,具

排序算法合集(冒泡,选择,插入,堆排,快排)

1.冒泡排序 最初在学c语言时,老师就教的这个排序算法,原理比较简单:从数组下标为0处开始遍历,相邻之间进行比较,若a[i]>a[i+1],则exchange(a[i],a[i+1]),当然也可以将小的往后传递,将此过程不断进行,那么最后数组就有序了. 要点:(1)每遍历一遍,末尾就得到一个最大值(或最小值),那么接下来的遍历是不是每次都减少一个元素就好了,因为后边的已经排好序了啊. (2)遍历n-1遍就排好序了,因为最后一遍只剩一个元素了,它一定放那儿,所以最后一遍就不用遍历了. 当然如果数据

常见排序算法详解(冒泡、选择、插入、快速、希尔、归并)

一.排序算法 1.冒泡排序(Bubble Sort) 定义:是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 原理: 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的

StringBuffer、StringBuilder、冒泡与选择排序、二分查找、基本数据类型包装类_DAY13

1:数组的高级操作(预习) (1)数组:存储同一种数据类型的多个元素的容器. (2)特点:每个元素都有从0开始的编号,方便我们获取.专业名称:索引. (3)数组操作: A:遍历 public static void printArray(int[] arr) { for(int x=0; x<arr.length; x++) { System.out.println(arr[x]); } } B:获取最值 public static int getMax(int[] arr) { int max

排序---内部排序算法(快排、希尔排序、归并排序、基数排序、冒泡、选择排序)比较

1.内部排序的复杂度总结 1)时间复杂度 4种排序的平均时间复杂度是O(nlog2n),"快些以nlog2n的速度归队"(快排.希尔排序.归并.堆排序) 最坏情况下,快排的时间复杂度为O(n*n) 2)空间复杂度 O(log2n)快排 O(n)归并 O(rd)基数 其他都是O(1) 3)稳定性 不稳定的:"考研复习痛苦啊,情绪不稳定,快些选一堆好友来聊天吧"(快排.希尔.简单选择排序.堆排序) 其他都是稳定的. 4)一趟排序,保证一个关键字到达最终位置 交换类(起泡