数组中元素的排序(常用的冒泡排序、选择排序、快速排序)

1.冒泡排序(以从小到大为例)

分析】:冒泡排序的思想就是,两两进行比较,第一个元素和第二个元素进行比较,如果第一个元素比第二个元素大,则这两个元素交换位置,然后第二个元素和第三个元素进行比较,如果第二个元素比第三个元素大,交换位置,依次类推,知道到最后一个元素。在比较的时候,每进行一轮比较,就可以找到当前这一轮的最大值, 我们可以将每一轮找到的最大值放到最后,知道最终剩下两个值,比较完之后,就可以将当前数列的数据按照从小到大的顺序排列好。

以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  数列为例。

第一轮: 2    6   8   9   1   2       第二轮: 2   6   8   1   2       第三轮:2  6  1  2    第四轮:1  2   2    第五轮:1   2

    2   6    8   9   1   2           2    6   8   1   2           2     1  6  2        1     2  2

     2   6    8   9   1   2           2    6      1  8   2            2  1  2  6

     2   6   8    1   9   2           2    6   1  2   8          

     2  6    8   1   2   9

代码:

var arr = [ 2 ,  6  ,8  ,9  ,1  ,2 ];

function bubbleSort(arr) {

  //确定轮数

  for (var i = 0; i < arr.length; i++) {

    //每一轮数值比较

    for (var j = i; j < arr.length-1; j++) {

      //谁小谁放在前面

      if (arr[i] > arr[i + 1]) {

        var temp = arr[i];

        arr[i] = arr[i + 1];

        arr[i + 1] = temp;

      }

    }

  }

  return arr;

}

console.log(bubbleSort(arr));

运行结果:  [1, 2, 2, 6, 8, 9]

2. 选择排序(从小到大排序)

【分析】:选择排序,遵循的是打擂台的游戏。冠军只有一个,主要与每个人进行比,最后胜出者为冠军。第一个人和后面的每个人都要打,谁小谁就放在最前面,然后第二个人和后面的每个人都要打,谁小,谁就是次二,依次类推。

还是以:a=[  2 ,  6  ,8  ,9  ,1  ,2 ]  数列为例。  

第一轮: 2   6  8  9  1  2    第二轮:6  8  9  2  2    第三轮:8  9  6  2    第四轮:   8  9  6    第五轮:8  9

     2   6  8  9  1  2        6  8  9  2  2        6  9  8  2        6  9  8  

     2   6     8     9  1  2        2  8  9  6  2        2  9  8  6

       1      6   8     9     2  2        2  8  9  6  2

       1   6      8  9  2  2

代码:

arr =[ 2 ,  6  ,8  ,9  ,1  ,2 ];

function chooseSort(arr) {

  // 确定轮数

  for (var i = 0; i < arr.length-1; i++) {

    // 每一轮都和第一个进行比较

    for (var j = i + 1; j < arr.length; j++) {

      // 谁小谁放在前面

      if (arr[i] > arr[j]) {

        var temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

      }

    }

  }

  return arr;

}

console.log(chooseSort(arr));

运行结果:  [1, 2, 2, 6, 8, 9]。

3. 快速排序(从小到大排序)

【分析】:将偏中间的数作为基准值,小于它的放在数组的左边,大于它的放在数组的右边,一轮比完之后,我们再将左边的左边的作为一个数组,右边的作为一个数组,然后分别找中间的技术,再按上面的方法进行计算(也就是递归),直到数组中剩下一个元素(也是循环结束的终止条件)。

代码:

arr = [2, 6, 8, 9, 1, 2];

function quickSort(arr) {

  if(arr.length <= 1) {

    return arr;

  }

  var midIndex = parseInt(arr.length / 2);

  var midValue = arr[midIndex];

  var leftArr = [];

  var rightArr = [];

  for(var i=0;i< arr.length;i++) {

    if( i== midIndex) {

      continue;

    }

    if(arr[i] < midValue) {

      leftArr.push(arr[i]);

    }else {

      rightArr.push(arr[i]);

    }

  }

  return quickSort(leftArr).concat(midValue).concat(quickSort(rightArr));

}

console.log(quickSort(arr));

运行结果:  [1, 2, 2, 6, 8, 9]。

4.常见的还有希尔排序和插入排序,在这里就不做详细的介绍的。

原文地址:https://www.cnblogs.com/lxz123/p/11443999.html

时间: 2024-11-05 16:38:07

数组中元素的排序(常用的冒泡排序、选择排序、快速排序)的相关文章

基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序)

冒泡排序 public static void bubbleSort(int[] arr){ int lgn = arr.length; for (int i = 0; i < lgn - 1; i++) { for (int j = 0; j < lgn - 1 - i; j++) { if(arr[j] > arr[j + 1]){ int temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; } } } } 选择排序 publ

算法_基本排序算法之冒泡排序,选择排序,插入排序和希尔排序

排序的元素实现了Comparable接口,以达到对于通用性. 最基础的排序是冒泡排序,下面是其思路: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 下面是其实现代码: public class Maopao { public void sort(Comparable[]

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序

下面列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序,然后是测试的例子.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

C实现数组中元素的排序

使用C实现数组中元素的排序,使得数组中的元素从小到大排列.只不过在这个过程中出了一点小问题,在C中进行数字交换的时候,必须要使用指针的,不能使用引用.在后面的文章中,我要学习一个在C中的引用和指针的区别.下面看一下我的代码吧. #include <stdio.h> void swap(int *a,int *b); void rest(int lels[],int count); /** * 该实例用于实现对用户输入的数组进行排序 * 要求的数组中的元素从小到大来咧 * * @brief ma

数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建数组 //1.快速创建数组@[] NSArray*[email protected][@"month",@"tue",@" wed",@"fir"]; //2,创建空的数组 NSArray*arr=[[NSArray a

VB6之多维数组中元素在内存中的排列情况

1 Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long) 2 3 4 'code by lichmama from cnblogs.com 5 Private Sub Form_Load() 6 Dim a(2) As Byte 7 Dim b(2, 2) As Byte 8 Dim c(2, 2, 2) As Byte 9 1

JS实现循环删除数组中元素的方法介绍

这篇文章主要给大家介绍了关于Javascript循环删除数组中元素的几种方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 本文主要跟大家分享了关于Javascript循环删除数组中元素的几种方法,分享出来供大家参考学习,下面来看看详细的介绍: 发现问题 大家在码代码的过程中,经常会遇到在循环中移除指定元素的需求.按照常规的思路,直接一个for循环,然后在循环里面来个if判断,在判断中删除掉指定元素即可.但是实际情况往往不会像预想的那样顺利

黑马基础阶段测试题:定义一个int类型的数组,数组中元素为{5,7,3,9,4}。求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出“最小值为偶数”,如果不是偶数则输出“最小值为奇数”。打印如下:

package com.swift; import java.util.Arrays; public class ArrayTest { public static void main(String[] args) { /* * 定义一个int类型的数组,数组中元素为{5,7,3,9,4}. * 求出数组中的最小值,并判断最小值是否为偶数,如果是偶数则输出"最小值为偶数",如果不是偶数则输出"最小值为奇数".打印如下 */ int arr[]= {5,7,3,9,4

根据Bool值挑选数组中元素

根据Bool值挑选数组中元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用Boolean类型的数组挑选一维数组中的值 使用一维Boolean数组选取数组中的特定元素,对应位置为True则选取,为False则不选取 import numpy as np i_=[2] # 挑选第三行数据 pop=np.arange(12).reshape(3,4) print("pop(3,4)\n",pop) bool=np.array([0,0,1,1]).astype("b