【归并排序算法】教程文章相关的互联网学习教程文章

排序算法【代码】

内部排序  -插入排序    -直接插入排序    -折半插入排序    -希尔排序  -交换排序    -冒泡排序    -快速排序  -选择排序    -简单选择排序    -堆排序  -归并排序  -基数排序外部排序  -多路归并排序 1.直接插入排序  算法思路:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,指导全部记录插入完成。  性能分析:      空间复杂度O(1)      时间...

排序算法Java实现(基数排序)【代码】

1package sorting;2 3/** 4 * 基数排序5 * 平均O(d(n+r)),最好O(d(n+r)),最坏O(d(n+r));空间复杂度O(n+r);稳定;较复杂6 * d为位数,r为分配后链表的个数7 * @author zeng8 *9*/10publicclass JishuPaixu { 1112publicstaticint getNumInPos(int num, int pos) { 13int tmp = 1; 14for (int i = 0; i < pos - 1; i++) { 15 tmp *= 10; 16 } 17return (num / tmp) % 10; 18 } 1920publicstaticint getMaxWeishu...

详解冒泡排序算法【代码】【图】

基本思想冒泡排序的基本思想是: 通过对待排序的序列从前向后依次比较相邻元素的值,如果发现逆序则交换。 逆序的含义:如果想把序列从小到大排序,那么两个数中前面的比后面的大就是逆序。 若需求是将序列从小到大排序,那么每一趟比较都会把值较大的逐渐从前面移动到后面。 就像水底的泡泡一样: (如下图,图片来源于网络)例子给定一个数组如下: [ 5 , 8 , -2 , 20 -6 ] 定义两个变量 i 和 j,初始状态 i 存第一个元素的索引,...

插入排序算法【代码】

插入排序:从元素的第二个值开始 假设第一个值是排序完成的队列,每次向排序好的队列中插入值得时候都由后往前,直到找到自己应该在得位置publicstaticvoid compare2(int[] arr) {for (int i = 1; i < arr.length; i++) {int current = arr[i];int perIndex = i - 1;while (perIndex >= 0 && current < arr[perIndex]) {arr[perIndex + 1] = arr[perIndex];perIndex--;}arr[perIndex + 1] = current;}for (int i = 0; i < arr.leng...

排序算法【代码】

1、冒泡排序:从尾致头做一遍相邻元素的两两比较,将小的元素往前交换位置,一遍下来得到第一个元素为最小的,然后在剩余的n-1个元素中再进行比较,选出第二个最小的,以此类推。不稳定、O(n2)function bubbleSort(arr){var i,j,tmp,len=arr.length;for(i=0;i<len;i++){for(j=len-1;j>i;j--){if(arr[j]<arr[j-1]){tmp = arr[j];arr[j] = arr[j-1];arr[j-1] = tmp;}}}return arr; }2、快速排序:选取一个基准,将大于它的元素放在右...

常规的排序算法【代码】

在此列举常用简单的排序算法,冒泡、插入、归并和快排,后边有机会再添加其他排序方法。冒泡排序思想:每次交换相邻元素,时间复杂度为O(N^2)privatestaticvoid bubbleSort(int[] n) {//相邻元素交换位置,时间复杂度为O(N^2)for(int i = 0; i < n.length; i++) {for(int j = 0; j < n.length-1; j++) {if(n[j] > n[j+1]) {int tmp = n[j];n[j] = n[j+1];n[j+1] = tmp;}}}}插入排序思想:每次从后边获取一个元素,与前边已排好序...

java实现经典排序算法【代码】【图】

前言博主最近在恶补基础知识,算法必然是必不可少的,那么就从经典排序算法开始吧!(图源网络,侵删),没有列出全部,因为在期末考试囧代码太多,就只显示了最关键的部分1. 冒泡排序 实现思路: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。 (2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第 N-1个位置。 (3)N=N-1,如果N不为 0就重复前面二步,否则排...

【Python之路22】冒泡排序算法【代码】

1、变量互换a = 123 b = 456temp = a a = b b = temp python比较简单的变量互换:a = 123 b = 456 a,b = b,a print(a,b) 2、将列表中最大的值放置到最后#!usr/bin/env python # -*- coding:utf-8 -*- li = [11,44,33,66,22] for i in range(len(li)-1):if li[i] > li[i+1]:temp = li[i]li[i] = li[i+1]li[i+1] = tempprint(li) 3、循环嵌套冒泡排序法#!usr/bin/env python # -*- coding:utf-8 -*- li = [11,44,33,66,77,99,44] fo...

10种排序算法基础总结【图】

基于比较的排序:  基础排序: 冒泡排序:谁大谁上,每一轮都把最大的顶到天花板 效率太低——掌握swap。选择排序:效率较低,但经常用它内部的循环方式来找最大值和最小值。插入排序:虽然平均效率低,但是在序列基本有序时,它很快,所以也有其适用范围。希尔排序(缩小增量排序):是插排的改良,对空间思维训练有帮助 时间复杂度O(n1.3),介于O(nlgn)~O(n2)之间  分治法:快速排序:是软件工业中最常见的常规排序法,其双向...

排序算法(python实现)【代码】

# 找到序列中最小元素,然后与第一个交换,如果第一个为最小和自己交换 # 再从剩下的元素中找到最小元素,与剩下的元素中的第一个交换。 # 核心的意思就是每次要在剩余元素中选出最小,排到前面的位置def select_sort(sort_list):"""选择排序"""n = len(sort_list)for i in range(n-1):min_index = ifor j in range(i+1, n):if sort_list[j]< sort_list[min_index]:min_index = iif min_index != i:sort_list[i], sort_list[min_in...

各主流排序算法详细介绍【代码】【图】

一,插入排序插入排序基本思想:  在一个已经有序的序列里插入新的元素,直到有序序列包含所有被排序元素。例子:   代码实现:void InsertSort(vector<int> &v) {for(int i = 1;i < v.size(); ++i)//i表示有序集合里的元素数目和待插入元素下标 {for(int j = i; j > 0 && v[j-1] > v[j]; --j){int temp = v[j-1];v[j-1] = v[j];v[j] = temp;}} }View Code时间复杂度为O(N^2)空间复杂度为O(1)插入排序在小规模数据时或者...

利用二分法实现插入排序算法(二分法使用递归来实现)【代码】

最近在看《算法导论》这本书,在练习题当中发现了这样的一个问题:使用二分查找法来实现插入排序,由于之前的内容当中有讲解二分法的递归实现,所以在这便将它们结合起来希望解决这个问题。闲话不多说了,直接上代码:// Algrithms.cpp : 定义控制台应用程序的入口点。 ////使用二分法来完成插入排序,并且使用递归算法来完成二分法 #include "stdafx.h"int Binary_Divide(int A[], int low, int height, int key){//递归终止的条件...

归并排序算法【代码】

package cn.firstflag.crm.service;import org.apache.log4j.Logger;/*** * @author zhanmin.zheng**/publicclass mergerSortTest {privatestatic Logger log = Logger.getLogger(mergerSortTest.class);publicvoid merger() {int[] data = newint[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 }; mergerSort(data, 0, data.length-1);}publicstaticvoid mergerSort(int[] data, int left, int right) {if (left >= right) {return;}int center...

排序算法四(桶排序)【代码】

一、桶排序算法的引入。  之前我们已经说过了计数排序的算法。  这个时候我们如果有这样的一个待排序数据序列:int x[14]={-10, 2, 3, 7, 20, 23, 25, 40, 41, 43,60, 80, 90, 100};  我们如果按照计数排序的算法,那么待排序数据的范围是:-10 到 100  我们为了实现对于这个数据集的遍历,这个时候需要额外的开辟一个大小为(100- (-10)+ 1)的空间,这个时候的空间复杂度达远远超过我们的预计,也就是这个造成了空间...

面试中可能被问到的常用排序算法【代码】

排序算法排序算法是一种比较简单的算法,从我们一开始接触计算机编程开始接触的可能就是排序或者搜索一类的算法,但是因为排序在其他的一些算法中应用较多,所以为了提高性能已经研究了多种排序算法。目前区别排序算法主要还是以时间复杂度,空间复杂度,稳定性等来排序,接下来我们分别分析。稳定性算法区别一个排序算法是否是稳定算法只需看相同的关键字在排序完成后是否保持原来两者的前后关系即可,比如对于[1,2,3,4,1],a[0]=a...