一、冒泡排序
冒泡排序是最慢的排序算法之一,但也是最容易实现的排序算法。
之所以叫冒泡排序是因为它使用这种排序算法时,数值会像气泡一样从数组一端漂浮到另一端。假设正在将一组数字按照升序排列,较大的值会浮动在数组的右侧,而较小的值则会浮动在数组的左侧。
之所以会产生这样的现象是因为算法会多次在数组中移动,比较相邻的数据,当左侧值大于右侧值时,将它们进行互换。
总之冒泡排序就是相邻两个元素比较,满足交换条件就进行交换的过程。
下面先给出c语言的代码(很久之前写的,中间还带有一点小小的优化哦)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[100005];
int main()
{
int n, swap;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
/*
在a[0]到a[n-1]的范围内,一次比较两个相邻元素的值,若a[j]>a[j+1],则交换;
经过这样一趟冒泡,就把这N个数中最大的数放到a[n-1]中。
*/
for(int i = 0; i < n-1; i++)
{
swap = 0;
for(int j = 0; j < n - 1 - i; j++)
{
if(a[j] > a[j+1])
{
swap = 1;
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
if(!swap) break;
}
for(int i = 0; i < n; i++)
{
printf("%d", a[i]);
}
return 0;
}
再给出一个今天写的JS代码:
var bubbleSort = function(a){ //其中a为待排序数组
var len = a.length;
for(var i = len; i >= 2; i --)
{
for(var j = 0; j <= i-1; j ++)
{
if(a[j] <= a[j+1])
{
var temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return a;
}
时间复杂度分析:很显然的冒泡排序的时间复杂度为O(n^2)。
二、选择排序
选择排序的主要过程就是从数组的开头开始,将第一个元素和其他元素进行比较,检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续。这个过程一直执行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序。
下面给出js代码:
var selectSort = function(a){
var min, temp;
for(var i = 0; i < a.length-1; i++) //n-1
{
min = i;
for(var j = i+1; j < a.length; j++) //n-1
{
if(a[j] < a[i])
{
min = j;
}
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
return a;
}
很显然的时间复杂度为O(n^2)。
谢谢!!!