经典排序算法解析(三)

简介: 经典排序算法解析

六、双向冒泡排序


   双向冒泡排序是冒泡排序的一种变体,冒泡排序每次比较都是从左向右,找出最大的放在最后。双向冒泡排序则是第一轮从左向右将最大的放最后,第二轮从右向左将最小的放最首,如此交替直到整个数列排序完成。文字描述双向冒泡排序步骤如下:


1.从左向右依次比较相邻两个元素,如果顺序不对,则进行交换,如此一轮下来,最大的元素在最后。


2.除去已经排序好的元素,从右向左依次比较相邻的两个元素,如果顺序不对,则进行交换,最小的元素在首部。


3.交替重复步骤1与步骤2直到排序完成。


双向冒泡排序示意图如下:

image.png



JavaScript实现的双向冒泡排序算法:


var array = [1,54,2,64,12,65,76,46,34,98];

//双向冒泡排序

var start = 0;

var end = array.length;

while(end-start>0){

//从左向右冒泡

for(var i=start;i<end-1;i++){

 var temp = array[i];

 if (array[i+1]<temp) {

  array[i] = array[i+1];

  array[i+1] = temp;

 }

}

end--;

//从右向左冒泡

for(var j=end;j>start+1;j--){

 var temp = array[j];

 if (array[j-1]>temp) {

  array[j] = array[j-1];

  array[j-1] = temp;

 }

}

start++;

}

console.log(array);//[ 1, 2, 12, 34, 46, 54, 64, 65, 76, 98 ]

C实现的双向冒泡排序算法:


#include <stdio.h>

//双向冒泡排序

void mySort(int array[],int size){

int start = 0;

int end = size;

//从左向右冒泡

for(int i=start;i<end-1;i++){

 int temp = array[i];

 if (array[i+1]<temp) {

  array[i] = array[i+1];

  array[i+1] = temp;

 }

}

end--;

//从右向左冒泡

for(int j=end;j>start+1;j--){

 int temp = array[j];

 if (array[j-1]>temp) {

  array[j] = array[j-1];

  array[j-1] = temp;

 }

}

start++;

}

int main(){

int a[] = {1, 2, 12, 34, 46, 54, 64, 65, 76, 98,33};

mySort(a,11);

for(int i = 0;i<11;i++){

 printf("%d\n",a[i]);

}

return 0;

}

七、快速排序算法


   快速排序算法和基本思路是通过一趟排序将数列分成两部分,其中一部分的所有数据都比另一部分小。之后在分别在两个子数列中进行递归,直到最终排序完成。快速排序算法的核心是递归,因此其效率十分高。用文字描述快速排序的步骤如下:


1.随机取一个元素作为基准,将小于此元素的数据都放在此元素的左侧,大于此元素的数据都放在此元素的右侧,将数列分隔成左右两个子数列。


2.分别对左右子数列进行步骤1的递归,直到数列长度为1或者0,表示排序完成。



image.png

JavaScript实现的快速排序算法:


var array = [1, 54, 2, 64, 12, 65, 76, 46, 34, 98, 34];

//快速排序

function sort(array, left, right) {

if (right - left >= 1) {

 //取第一个元素作为基准

 let base = array[left];

 let i = left + 1;

 let index = left;

 while (i <= right) {

  //大于等于的已经在右边 不需要修改 小于的要放在左边

  if (array[i] < base) {

   if (index + 1 == i) {

    //交换

    array[index] = array[i];

    array[i] = base;

    index++;

   } else {

    //先将base与其后一个元素交换

    array[index] = array[index + 1];

    array[index + 1] = base;

    //交换

    let temp = array[index];

    array[index] = array[i];

    array[i] = temp;

    index++;

   }


  }

  i++;

 }

 //递归排序

 sort(array, left, index - 1);

 sort(array, index + 1, right);

}

}

sort(array, 0, array.length - 1);

console.log(array); //[ 1, 2, 12, 34,34, 46, 54, 64, 65, 76, 98 ]

C语言实现的快速排序:


#include <stdio.h>

//快速排序

void mySort(int array[],int left,int right){

if(right-left>=1){

 int base = array[left];

 int i = left+1;

 int index = left;

 while(i<=right){

  if(array[i]<base){

   if(index+1==i){

    array[index] = array[i];

    array[i]=base;

    index = i;

   }else{

    array[index]=array[index+1];

    array[index+1] = base;

    int temp = array[index];

    array[index] = array[i];

    array[i] = temp;

    index++;

   }

  }

  i++;

 }

 mySort(array, left, index-1);

 mySort(array, index+1, right);

}

}

int main(){

int a[] = {1, 2, 12, 34, 46, 54, 64, 65, 76, 98,34};

mySort(a,0,10);

for(int i = 0;i<11;i++){

 printf("%d\n",a[i]);

}

return 0;

}

目录
相关文章
|
29天前
|
机器学习/深度学习 存储 算法
如何评判算法好坏?复杂度深度解析
如何评判算法好坏?复杂度深度解析
24 0
|
1月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
232 1
|
1月前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
46 0
|
18天前
|
存储 缓存 算法
深度解析JVM世界:垃圾判断和垃圾回收算法
深度解析JVM世界:垃圾判断和垃圾回收算法
|
19天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
23天前
|
存储 算法
从动态规划到贪心算法:最长递增子序列问题的方法全解析
从动态规划到贪心算法:最长递增子序列问题的方法全解析
20 2
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:随机森林
Python基础算法解析:随机森林
37 0
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:决策树
Python基础算法解析:决策树
36 8
|
1月前
|
机器学习/深度学习 数据采集 算法
Python基础算法解析:支持向量机(SVM)
Python基础算法解析:支持向量机(SVM)
35 0
Python基础算法解析:支持向量机(SVM)
|
1月前
|
算法 Python
Python基础算法解析:K最近邻算法
Python基础算法解析:K最近邻算法
20 2

推荐镜像

更多