基本排序算法<二>】的更多相关文章

归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 private void merge_sort(int[] array, int first, int last) { if (first + 1 < last) { int mid = (first + last) / 2; merge_sort(array, first, mid); merge_sort(array, mid, last); // merge int i…
归并排序 归并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序.合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并. 归并排序的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的.它是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化.他的唯一缺点是,需要利用额外的N的空间来进行排序. 原理 合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,具体的过程…
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用变量记住它的下标. [java实现] public class SimpleSelectionSort { public static void main(String[] args) { int[] arr = { 9, 1, 5, 8, 3, 7, 4, 6, 2 }; System.out.p…
快速排序: 1 package test; public class QuickSort { // 快速排序 public void quickSort(int s[], int l, int r) { if (l < r) { // Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1 int i = l, j = r, x = s[l]; while (i < j) { while (i < j && s[j] >=…
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Nov 21 22:28:09 2017 @author: livermorium116 """ import random class MergeSortedByCur(): def __init__(self, data): self.data = data #print("ORIGIN DATA:&q…
##归并排序 ##基本思想:对于两个排好序的数组A和B,逐一比较A和B的元素,将较小值放入数组C中,当A或者B数组元素查询完后,将A或者B剩余的元素直接添加到C数组中,此时C数组即为有序数组,这就是归并排序原理 ##step1:对于一个无序数组A,可以取A元素中间索引,将A数组分为两个部分A1,A2: ##step2:递归A1,A2,分别将A1,A2分为A11,A12和A21,A22两部分直至只有一个元素: ##step3:对于只有一个元素的数组来讲,其是有序的,因此,对于两个只有一个元素的数组…
java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点(大顶堆反之). 构建完一个小顶堆后,开始排序. 将最后一个节点和第一个节点交换位置(根节点是最小的,最小的顶点放到了后面),交换后进行调整,保持小顶堆(次小的顶点到了根节点). 依次执行下去,这样每一次交换将最小的顶点的放到了最后,所以最后数组会从大到小排列. public static void…
java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到第n个,和相邻的元素进行相比,如果比相邻的大的话,那么就交换二者顺序,这样的话0到n范围内的最大的数就放到n的位置.接着下一次操作,第0个到第n-1个,将0到n-1范围内的最大值放到n-1.重复执行,最后数组从小到大排列. public static void bubble(int array[])…
排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的首个算法就是高效的排序算法.本文将对排序算法做一个全面的梳理,从最简单的"冒泡"到高效的堆排序等. 上一篇博文<排序算法二:二分(折半)插入排序>讲述了直接插入排序,本文讲述第三种插入排序算法:Shell插入排序.实际上它是改进自插入排序和冒泡排序. 排序相关的的基本…
一.选择排序 1.基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止. 2.实例 3.算法实现 /** * 选择排序算法 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾. * 以此类推,直到所有元素均排序完毕. * @param numbers */ public static void selectSort(in…