冒泡排序

Java实现排序算法效率比较

自古美人都是妖i 提交于 2020-02-14 13:33:27
实训题 4:排序算法效率比较 一 项目说明 实训目的:数组、Java API 的应用 实训要求:随机生成 10000 个 10000 以内的实数,分别用选择、冒泡、快速排序等算法进行排序,计算各种排序所需时间并比较算法的效率。 二 类设计 快速排序kuaiSuSort(int a[], int low, int high) 快速排序的基本思想就是从一个数组中任意挑选一个元素(通常来说会选择最左边的元素)作为中轴元素,将剩下的元素以中轴元素作为比较的标准,将小于等于中轴元素的放到中轴元素的左边,将大于中轴元素的放到中轴元素的右边。然后以当前中轴元素的位置为界,将左半部分子数组和右半部分子数组看成两个新的数组,重复上述操作,直到子数组的元素个数小于等于1(因为一个元素的数组必定是有序的) 排序算法效率比较Compare(long a,long b,long c) 将每个排序运行的时间进行比较,输出时间最少的那个排序算法。 三 项目实现设计 主方法中用for循环随机数的生成先生成 10000 个 10000 以内的实数,然后在各个排序前后定义一个System类的currentTimeMillis()方法,用于统计当前时间,再进行排序运算: 冒泡排序 第一步,从第一个元素开始,将相邻的两个元素依次进行比较,直到最后两个元素完成比较。如果前一个元素比后一个元素大,则交换它们的位置

冒泡排序及其优化的C++代码实现

谁说胖子不能爱 提交于 2020-02-14 11:35:46
关于冒泡排序算法,这里就不多说了。 简单说一下优化,一般的冒泡排序是单向的,而其优化之一就是双向冒泡:正向扫描获取最大值,反向扫描获取最小值。 由于C++11以前的实现有点复杂,在此就基于C++11新特性来实现,并写成库的形式。 编译环境:C++11 代码实现如下: #include <type_traits> // std::declval template<typename _Tp> void swap(_Tp &a1, _Tp &a2) { _Tp tmp = a1; a1 = a2; a2 = tmp; } template<typename _Tp> struct Comparator { int operator()(const _Tp &arg1, const _Tp &arg2) const { if(arg1 < arg2) return 1; if(arg2 < arg1) return -1; return 0; } }; typedef unsigned long size_type; /// 普通冒泡排序 /// 范围:[beg, end) /// 参数限定:支持前向迭代 template<typename _ForwardIter, typename _Compare = Comparator<decltype(*std::declval<

JS实现冒泡排序

点点圈 提交于 2020-02-13 16:41:57
冒泡排序:   随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果。 var arr = [3,1,4,2,5,21,6,15,63]; function sortA(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ //获取第一个值和后一个值比较 var cur = arr[i]; if(cur>arr[j]){ // 因为需要交换值,所以会把后一个值替换,我们要先保存下来 var index = arr[j]; // 交换值 arr[j] = cur; arr[i] = index; } } } return arr; }//因为一次循环只能交换一个最大的值,所以需要再套一层for循环。 来源: https://www.cnblogs.com/Magiccwl/p/7027591.html

Java常用排序算法

徘徊边缘 提交于 2020-02-13 12:15:59
在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。 一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为顺串(run),顺串生成后即将其写入外存。这样在外存上就得到了m个顺串(m=[n/t])。最后,对这些顺串进行归并,使顺串的长度逐渐增大,直到所有的待排序的几率成为一个顺串为止。 内排序可以分为以下几类: (1)、插入排序:直接插入排序、折半插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换排序:冒泡排序、快速排序。 外排序可以分为一下几类(既使用内部存储也使用外部存储,内存不够时建议使用): (4)、归并排序 (5)、基数排序 稳定性:就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。再简单具体一点,如果A i == A j,Ai 原来在 Aj 位置前,排序后 Ai 仍然是在 Aj 位置前。 不稳定:简单选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法 稳定:冒泡排序、直接插入排序、折半插入排序,归并排序和基数排序都是稳定的排序算法。 平均时间复杂度 O(n^2):直接插入排序,简单选择排序

C语言——冒泡排序

依然范特西╮ 提交于 2020-02-13 11:09:06
冒泡排序是数组中重要的知识 题目:实现从小到大排序 # include <stdio.h> int main ( int argc , const char * argv [ ] ) { int a [ ] = { 12 , 23 , 45 , 1 , 4 , 67 , 7 } ; int n , i , j ; int t ; //用于交换 n = sizeof ( a ) / sizeof ( int ) ; //计算数组维数 for ( i = 0 ; i <= n - 1 ; i ++ ) { for ( j = 0 ; j <= n - 2 - i ; j ++ ) { if ( a [ j ] > a [ j + 1 ] ) { t = a [ j + 1 ] ; //交换开始 a [ j + 1 ] = a [ j ] ; a [ j ] = t ; } } } for ( i = 0 ; i < n - 1 ; i ++ ) { printf ( "%d" , a [ i ] ) ; puts ( "" ) ; //换行 } return 0 ; } 来源: CSDN 作者: 无垠VIP 链接: https://blog.csdn.net/qq_46121136/article/details/104222372

交换排序

安稳与你 提交于 2020-02-12 17:52:01
交换排序的基本方法: 两两比较待排序对象的排序码,如果发生逆序,则交换之,直到所有对象都排好序为止。 交换排序的实施方案: 1. 冒泡排序 2. 快速排序 一、冒泡排序 1. 算法代码: /** * 冒泡排序 **/ func BubbleSort(data []int) { for i := 0; i < len(data)-1; i++ { //一共冒泡len(data)-1趟 exchange := false for j := 0; j < len(data)-i-1; j++ { if data[j] > data[j+1] { data[j], data[j+1] = data[j+1], data[j] exchange = true } } if !exchange { //没有发生移位,说明已排序完成,提前退出冒泡 break } } } 2. 空间复杂度:O(1) 3. 时间复杂度:O(n*n) 4. 稳定性:稳定 二、快速排序 1. 算法描述: 任取待排序对象中某个对象作为基准,按照该对象的排序码大小,将所有对象划分为左右两个子序列,左序列所有对象排序码都小于或等于基准对象的排序码,右序列所有对象的排序码都大于基准对象的排序码,基准对象则放置在这两个序列中间,然后分别对这两个子序列重复实施上述方法,直至所有对象都排在相应位置上为止。 2. 算法代码: /**

冒泡排序,选择排序

≡放荡痞女 提交于 2020-02-11 12:15:11
什么叫排序 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。 排序的本质是什么? 元素的比较+元素的换位 怎么实现 我们拿数组作为一个容器,来存储那些无序的元素。 利用Java语言的循环for,逻辑if,和数组这三个基础知识来进行排序算法的实现。 冒泡排序 思路: 从前往后 两个两个元素进行比较,如果当前元素比之后的那个元素大,需要做两个元素位置的交换。 以从小到大(升序)排序为例,如果想让无序数组中的元素变得有序,冒泡排序先是遍历数组中每一个元素,从第一个元素开始,如果第一个元素比它后一个元素大,这两个元素就交换位置,否则不交换。如此遍历到数组的倒数第二个元素,倒数第二个元素与倒数第一个元素做比较,第一次遍历结束。第一次遍历会得到数组中数字最大的那个元素,第二次遍历会得到次大的元素,以此类推,经过数组的长度-1次的轮询,即可排序完毕。 代码实现 //冒泡排序 public static void bubbleSort ( int [ ] array ) { for ( int i = 0 ; i <

快速排序、冒泡排序

半城伤御伤魂 提交于 2020-02-11 07:19:17
我目前最常用的两种排序:冒泡排序和快速排序 比较一下他们的性能: 1 #include<stdio.h> 2 3 void QuickSort(int * a,int left,int right) 4 { 5 if(left>right) 6 { 7 return; 8 } 9 int stand=a[left]; 10 int i=left; 11 int j=right; 12 //得到基准数位置 13 while(i!=j) 14 { 15 while(i<j&&a[j]>=stand) 16 { 17 --j; 18 } 19 while(i<j&&a[i]<=stand) 20 { 21 ++i; 22 } 23 if(i<j) 24 { 25 int temp=a[i]; 26 a[i]=a[j]; 27 a[j]=temp; 28 } 29 } 30 //将基准数放入找出的位置 31 a[left]=a[i]; 32 a[i]=stand; 33 //递归处理 34 QuickSort(a,left,i-1); 35 QuickSort(a,i+1,right); 36 return; 37 } 38 39 void BubbleSort(int * a,int n) 40 { 41 for(int i=0;i<n-1;i++) 42 { 43 for(int j

算法-冒泡排序和快速排序

怎甘沉沦 提交于 2020-02-11 06:59:06
冒泡和递归一样,不管大家水平怎么样,基本上都能凑合的写写,快速排序其实主要的也是数据的交换,都算是交换排序,不过快排需要了解分治思想,实现的时候需要递归一下,导致很多时候看快排的时候都看的云里雾里。假设有一个无序的整型数组 索引 0 1 2 3 4 5 6 数值 15 32 8 99 12 17 36, ①取出0位的15作为基准值,然后倒序从后往前找小于15的,将12赋值给0位; ②从前往后找大于15的将32放置到位置4; ③位置1空出来,然后继续倒序找小于15的,正序找大于15的,最后索引到大3的时候重复以上过程。 冒泡排序 冒泡基本上没有什么好说的,直接看代码吧,新建了Sort类处理排序: // // Sort.h // Algorithm //http://www.cnblogs.com/xiaofeixiang // Created by keso on 15/3/15. // Copyright (c) 2015年 keso. All rights reserved. // #import <Foundation/Foundation.h> @interface Sort : NSObject @property (nonatomic,strong)NSMutableArray *dataSource; -(void)bubbleSort:(NSMutableArray*

排序算法之冒泡排序

女生的网名这么多〃 提交于 2020-02-11 06:12:43
冒泡排序应该是大家比较熟悉的排序方法之一,但是确是一个效率不是太高的排序算法,特别是面对大数据集的时候。 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,接下来的操作类似,看例子如下: 例子为从小到大排序, 原始待排序数组 | 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态 | 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态 | 2 | 6 | 4 | 1 | 5 | 9 | 第二次两两比较,6 > 4交换 交换前状态| 2 | 6 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 4 | 6 | 1 | 5 | 9 | 第三次两两比较,6 > 1交换 交换前状态| 2 | 4 | 6 | 1 | 5 | 9 | 交换后状态| 2 | 4 | 1 | 6 | 5 | 9 | 第四次两两比较,6 > 5交换 交换前状态| 2 | 4 | 1 | 6 | 5 | 9 | 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 | 第五次两两比较,6 < 9不交换 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 4 | 1 | 5