javascript中的冒泡排序法

在开发中,对一组数据进行有序地排列是经常需要做的事情,所以掌握几种甚至更多的排序算法是绝对有必要的

这里要介绍的是排序算法中较简单的一种算法:冒泡排序。

先尝试用最简单的想法去实现排序,以此来比较学习冒泡排序

设有一数组,其大小为10个元素(int   str[10])数组内的数据是无序。现在要求我们通过编程将这个无序的数组变成一个从小到大排序的数组(从下标为0开始) 。

按照题目的要求,毫无疑问,正确的结果应该就像这样: 1 2 3 4 5 6 7 8 9 10   要做到这样,最简单和最直接想到的方法就是进行对比交换。

  • 首先,把10个数里最小的个数放到下标为0的位置上(str[0])
  • 通过将下标为0的数(str[0])与剩下其余9个数进行对比交换(将较少者放置在下标为0的位置上),就可以得到这10个数最小的那个
  • 10个数最小的那位确定后,接下来就要找剩下9个数最小的那个。
  • 因为已经确定出一个最小的数,所以就不要动str[0],直接从str[1]开始,与剩下的8个数对比交换,找出9个数中最小的那位放到下标为1(str[1])的位置上
  • 继续按照这个思路就可以将这十个数变成有序的(从小到大)的数组。

代码:

  1. #include <stdio.h>
  2. void swap(int *a, int *b); //交换两个数
  3. int main()
  4. {
  5. int     str[10];
  6. int     i, j;
  7. //初始化数组为10 9 8 7 6 5 4 3 2 1
  8. for (i = 0; i < 10; i++)
  9. {
  10. str[i] = 10 - i;
  11. }
  12. //排序,从a[0]开始排,从小到大
  13. for (i = 0; i < 10; i++)
  14. {
  15. for (j = i + 1; j < 10; j++)
  16. {
  17. if (str[i] > str[j])
  18. {
  19. swap(&str[i], &str[j]);
  20. }
  21. }
  22. }
  23. //将十个数输出
  24. for (i = 0; i < 10; i++)
  25. printf("%d\n", str[i]);
  26. return    0;
  27. }
  28. void swap(int *a, int *b)
  29. {
  30. int     c;
  31. c = *a;
  32. *a = *b;
  33. *b =  c;
  34. }

这个方法是比较容易想到的实现方法。但存在不足:就是本来位于前面的较小数被交换到后面。

例如:

开始:9 4 5 6 8 3 2 7 10 1  (下标从左到右分别是0~9)按照上面的程序进行对比交换

第一次:4 9 5 6 8 3 2 7 10 1 

第二次:4 9 5 6 8 3 2 7 10 1 

。。。:(没有交换)

第五次:3 9 5 6 8 4 2 7 10 1

第六次:2 9 5 6 8 3 4 7 10 1 

。。。:(没有交换)

第十次:1 9 5 6 8 3 4 7 10 2 

可以看出,原来较小的数是在前面的,经过一轮的交换后放到后面了

那么怎样解决这个不足呢?可以使用冒泡排序。

什么是冒泡排序呢?

你可以这样理解:(从小到大排序)存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序。

在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去 。

 

代码:

  1. #include <stdio.h>
  2. void swap(int *a, int *b);
  3. int main()
  4. {
  5. int    array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};
  6. int    i, j;
  7. for (i = 0; i < 10; i++)
  8. {
  9. //每一次由底至上地上升
  10. for (j = 9; j > i; j--)
  11. {
  12. if (array[j] < array[j-1])
  13. {
  14. swap(&array[j], &array[j-1]);
  15. }
  16. }
  17. }
  18. for (i = 0; i < 10; i++)
  19. {
  20. printf("%d\n", array[i]);
  21. }
  22. return    0;
  23. }
  24. void swap(int *a, int *b)
  25. {
  26. int    temp;
  27. temp = *a;
  28. *a = *b;
  29. *b = temp;
  30. }

冒泡排序算法只会将较少的逐步向上推,不会造成文章前面所说的不足。

 

时间: 2024-10-18 14:41:43

javascript中的冒泡排序法的相关文章

JavaScript中科学计数法转化为数值字符串形式

原文地址:https://www.css88.com/archives/9318(受益匪浅) JavaScript 中经常会碰到数值计算问题,偶尔会在不经意间报一个不是bug的bug.今天来说说一个特殊的例子.我以0.0011BTC 价格买入 0.0002CZR 计算出了的金额是 0.00000022BTC,而 JavaScript 计算出来的金额是 2.2e-7 .值是对的,只是用了科学计数法,也是数值类型.但是问题来了,一般用户用户看不懂 2.2e-7,那么就把它转换成 0.00000022

javascript中的冒泡排序

冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9      交换了8次        i=0   j=array.length-1-i 第二轮比较:7,6,5,4,3,2,1,8,9      交换了7次        i=1   j=array.length-1-i 第三轮比较:6,5,4,3,2,1,7,8,9      交换了6次        i=2  

JavaScript中的冒泡排序和选择排序

一.冒泡排序: 相邻单位数据比较,从大到小排列,多次执行,完成排序 1 var arr = [3,44,38,5,47,25,36,2,79,8,1]; 2 //定义循环次数,之前比较出的数值,不参与下一次的比较 3 for(var j = 0; j <= (arr.lenght-1) - 1 ;j++){ 4 //上一次比较出的数值,不参与下一次循环 5 for(var i = 0;i<= (arr.lenght-1) - 1;i++){ 6 //内层循环,每次循环比较一个最大值,然后交换位

排序算法中的冒泡排序法

遍历 - 样本筛选 有的时候,样本范围内的数据可能不是每一个我们都需要,而是只需要其中一部分,那么在遍历样本时,就需要对取出的每一个样本数据进行判断,看是否满足我们的需要,也就是要对样本进行筛选. 比如,输出1-10之间所有的奇数,虽然样本范围是1-10,但不是每一个样本数据都是我们需要的,因此,我需要对取出的每一个数据进行验证,看它是不是奇数,如果是,才输出. 可以使用下面的代码来完成输出1-10之间所有的奇数: for (int i = 1; i <= 10; i++){ // 每一次进入循

Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序算法详解

http://baozoumanhua.com/users/10873617/articleshttp://baozoumanhua.com/users/10873639/articleshttp://baozoumanhua.com/users/10873665/articleshttp://baozoumanhua.com/users/10873687/articleshttp://baozoumanhua.com/users/10873718/articleshttp://baozouma

数据结构:链表 &gt;&gt; 链表按结点中第j个数据属性排序(冒泡排序法)

创建结点类,链表类,测试类 1 import java.lang.Object; 2 //结点node=数据date+指针pointer 3 public class Node { 4 Object iprop; 5 public Object getIprop(int i){ 6 switch(i){ 7 case 1:iprop=num;break; 8 case 2:iprop=name;break; 9 case 3:iprop=score;break; 10 } 11 return i

关于Java中的选择排序法和冒泡排序法

一,这种方法是直接传入一个数组进行排序(选择排序法) public static void selectSort(int arr[]){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[j]<arr[i]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } 二,这种事传入一个数组和一个数组个数(选择排序

C语言 数组输出,冒泡排序法,沉底排序法,二维数组输出,输出字母列长度,从随机数组中找重复数

#include <stdio.h> #define sum 3+4//宏定义是原封不动的使用used for test4 #include <time.h>//used for test8~9 #include <stdlib.h>//used for test8~9 void test(){//数组输出 //int a[5]={1,2,3,4,5}; printf("array output,look,please...\n"); int a[1

javascript中的数字玩法,颠覆你的眼睛

1.JavaScript中的数字中有一些很奇葩的现象. 在Chrome控制台中可以自己做一下实验: 1 === 1.0 ; //true 习惯了强类型语言,如java,c,OC看到这个结论还是有点小迷茫的.这是因为JavaScript内部,所有数字都是以64位浮点数形式存储的,包括正数.它遵循IEEE 754标准. 再看,浮点数的计算. 0.1 + 0.2: 浮点数 发现,0.3 - 0.2 不等于 0.2 - 0.1.所以在做浮点数计算和比较的时候还是要小心的. 对于整数运算,JavaScri