冒泡排序

进行冒泡排序、快速排序等效率比较并用echarts图显示

流过昼夜 提交于 2019-12-17 19:02:49
< ! DOCTYPE html > < html > < head > < meta charset = "utf-8" > < title > Sort_echarts < /title > < script src = "echarts.js" > < /script > < /head > < body > < div id = "main" style = "width: 1000px;height:600px;margin:0px auto" > < /div > < div id = "demo" style = "width: 100px;height:36px;margin:0px auto;text-align: center;font-weight: bold;font-family: 微软雅黑;font-size: 14px" > < /div > < center > < button id = "but" type = "button" onClick = "showtext();run()" style = "width:74px;height:36px;font-weight: bold;font-family: 微软雅黑;font-size: 14px;border-radius: 28px; background-color: #AAAAAA"

冒泡排序-优化后(C#)

旧巷老猫 提交于 2019-12-17 04:36:39
static void BubbleSort(int[] array) {   int n=array.Length-1;   for(int i=0;i<n;i++)   {     int flag=0;     for(int j=0;j<n-i-1;j++)     {       if(array[j]>array[j+1])       {         flag=1;         int temp=array[j];         array[j]=array[j+1];         array[j+1]=temp;       }     }     if(flag==0)      break;   } } 来源: https://www.cnblogs.com/LZHOO97/p/12052384.html

python 算法之快排和冒泡排序

帅比萌擦擦* 提交于 2019-12-16 23:27:36
array = [2, 3, 5, 7, 1, 4, 6, 15, 5, 2, 7, 9, 10, 15, 9, 17, 12] l = [1,4,5,3,2,6,7,9,8,8,] def maopao(num): for i in range(len(num)-1): for j in range(len(num)-i-1): if num[j] > num[j+1]: num[j], num[j+1] = num[j+1], num[j] return num def QuickSort(data): """快速排序""" if len(data) >= 2: # 递归入口及出口 mid = data[len(data) // 2] # 选取基准值,也可以选取第一个或最后一个元素 left, right = [], [] # 定义基准值左右两侧的列表 data.remove(mid) # 从原始数组中移除基准值 for num in data: if num >= mid: right.append(num) else: left.append(num) return QuickSort(left) + [mid] + QuickSort(right) else: return data if __name__ == '__main__': print(maopao(l))

交换排序(冒泡,快速排序)

柔情痞子 提交于 2019-12-16 03:23:26
交换排序 1.交换排序的思想 交换排序的思想为两两比较关键字的大小,若关键字次序相反,则这两个元素就进行交换,直到数组中没有出现反序的元素为止。 在这里主要介绍两种算法: 冒泡排序 快速排序 2.冒泡排序 冒泡排序的思想为在无序区中相邻两个元素比较,不断调整元素的位置,使关键字最小的元素像气泡一样冒出水面。 例:每经历一轮有效排序,都有一个元素加入有序区(冒泡到数组的一端) 数组下标 原始 第一轮 第二轮 第三轮 第四轮 0 4 0 0 0 0 1 2 4 1 1 1 2 3 2 4 2 2 3 1 3 2 4 3 4 0 1 3 3 4 冒泡排序是相邻元素的比较,是一个稳定的排序算法。 代码: /*冒泡排序 o(n^2) 稳定*/ void BubbleSort(Elem elem[], int len) { bool flag; for (int i = 0; i < len - 1; i++) { flag = false; for (int j = len - 1 ; j > i; j--) { if (elem[j].key < elem[j-1].key) { swap(elem[j - 1], elem[j]); flag = true; } } if (!flag) break; } } 3.快速排序法 快速排序法是冒泡算法的改进,也属于交换排序。 区别:

iOS算法--冒泡排序

不打扰是莪最后的温柔 提交于 2019-12-16 03:02:37
冒泡排序 简介 这是最常规的排序,也是基础到的第一个排序. 特点 两层循环 外层循环是个数的循环 内层循环是选出最大/小的数据 每次外层循环后,找到所需要数据,下次循环的范围就会缩小1 内层循环是移动flag,对比当前数据和下一条数据,满足交换,不满足不做改动,对比后,移动flag. 这种方式类似水下的泡泡,越往上越大,因此,被亲切称为 吗,冒泡排序 时间复杂度 最好:O(n) 最差:O(n2) 平均:O(n2) 代码 + (void)maoPao:(NSMutableArray<NSNumber *> *)array { for (int i = 0; i < array.count - 1; i++) { for (int j = 0; j < (array.count - 1 - i); j++) { if (array[j].integerValue > array[j + 1].integerValue) { [array exchangeObjectAtIndex:j withObjectAtIndex:j + 1]; } } NSLog(@"%@", [array componentsJoinedByString:@","]); } } 优化 缩短冒泡排序,其实可以设置一个flag,用来表明是否发生了数据交换. 在排序过程中, 如果没有发生排序变化,

数据结构常见面试题

让人想犯罪 __ 提交于 2019-12-15 20:44:56
数据结构常见面试题 1、数组和链表的区别。 从逻辑结构上来看 ,数组必须实现定于固定的长度,不能适应数据动态增减的情况,即数组的大小一旦定义就不能改变。当数据增加是,可能超过原先定义的元素的个数;当数据减少时,造成内存浪费;链表动态进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。 从内存存储的角度看 ;数组从栈中分配空间(用new则在堆上创建),对程序员方便快速,但是自由度小;链表从堆中分配空间,自由度大但是申请管理比较麻烦。 从访问方式类看 ,数组在内存中是连续的存储,因此可以利用下标索引进行访问;链表是链式存储结构,在访问元素时候只能够通过线性方式由前到后顺序的访问,所以访问效率比数组要低。 2、简述快速排序过程 1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。 3)此时基准元素在其排好序后的正确位置 4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。 3、快速排序的改进 只对长度大于k的子序列递归调用快速排序,让原序列基本有序,然后再对整个基本有序序列用插入排序算法排序。实践证明,改进后的算法时间复杂度有所降低,且当k取值为 8 左右时,改进算法的性能最佳。 选择基准元的方式 对于分治算法

冒泡排序

本秂侑毒 提交于 2019-12-15 01:11:34
基本思路 以从小到大排序为例,每一轮排序找出未排序序列的最大值,放在最后。通过n-1轮排序后序列变为有序。 Java实现 // 冒泡排序 public static void bubbleSort(int arr[]){ // 需要n-1轮排序 for (int i = arr.length - 1; i > 0; i--) { // 每一轮循环比较相邻的两个数,大的放后面 for (int j = 0; j < i; j++) { if (arr[j] > arr[j + 1]) { // 交换这两个数 int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } 改进版 // 冒泡排序改良版 public static void bubbleSortEX(int arr[]){ // 发生交换标记 boolean isExchanged; for (int i = arr.length - 1; i > 0; i--) { // 初始化标记为fasle未发生交换 isExchanged = false; for (int j = 0; j < i; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1

7-1 简单冒泡排序

孤者浪人 提交于 2019-12-14 11:04:11
#include<stdio.h> int main() { int i,j,a[10],temp,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(i=0;i<n;i++) { printf("%d ",a[i]); } return 0; } 来源: CSDN 作者: qq_45755396 链接: https://blog.csdn.net/qq_45755396/article/details/103536618

冒泡排序 java

不羁的心 提交于 2019-12-11 09:34:38
冒泡排序 这里用比较直观的栈,演示从栈底冒泡,排在栈顶的排序方法 我用一个特殊的例子, 倒序数组 来了解每一步算法的执行 { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} 图示 上图演示了 i = 0,第一次循环。利用循环 j 把栈底元素“0”排到栈顶的过程。数组变成 0 9 8 7 6 5 4 3 2 1 ; 其中, 黄色框 表示 具体对比范围,总是 j 指向的元素值跟上一个元素值 j - 1 比对 if ( arr [ j ] < arr [ j - 1 ] ) 紫色线段 表示 “0”和上一个元素交换后它的位置,多个这样的过程 由 j 控制的 最终将“0”移到栈顶 当然是因为它在数组中最小才被移到栈顶 int temp = arr [ j ] ; arr [ j ] = arr [ j - 1 ] ; arr [ j - 1 ] = temp ; i 的取值理解为栈顶有 i 个被排好序的元素 i ------------> 0 1 2 3 4 5 6 7 8 9 j ------------> 9 9 9 9 9 9 9 9 9 j ------------> 8 8 8 8 8 8 8 8 j ------------> 7 7 7 7 7 7 7 j ------------> 6 6 6 6 6 6 j ------------> 5 5 5 5 5 j -