- 浏览: 787552 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
public static void bubbleSort(int[] c){ for(int i=0,len=c.length;i<len;i++){ for(int j=0;j<len-i-1;j++){ if(c[j]>c[j+1]){ Helper.swap(c, j+1, j); } } } } public static void selectionSort(int[] c){ for(int i=0,len=c.length;i<len;i++){ int k=i; for(int j=i+1;j<len;j++){ if(c[j]<c[k])k=j; } if(k!=i){ Helper.swap(c, i, k); } } } public static void insertionSort(int[] a){ for(int i=1,len=a.length;i<len;i++){ int j=i; while(j>0){ if(a[j]<a[j-1]){ Helper.swap(a,j,j-1); } j--; } } } public static void quickSort2(int[] c,int begin,int end){ //update 2012/7/1 if(c==null||c.length<2){ return; } if(begin>end)return; int len = c.length; if(begin<end&&(0<=begin&&begin<len)&&(0<=end&&end<len)){ int point=c[begin]; int i=begin,j=end; int index=i; while(i<j){ while(c[j]>=point&&i<j)j--; if(i<j){ c[index]=c[j]; index=j; } while(c[i]<=point&&i<j)i++; if(i<j){ c[index]=c[i]; index=i; } } c[index]=point; quickSort2(c,begin,i-1); quickSort2(c,i+1,end); } } public static void quickSort(int[] c,int begin,int end){ if(begin>end)return; int low=begin; int high=end; boolean flag=true; while(low!=high){ if(c[low]>c[high]){ Helper.swap(c, low, high); flag=!flag; } if(flag){ high--; }else{ low++; } } quickSort(c,begin,low-1); quickSort(c,high+1,end); } /** * 用最大堆实现“就地”升序排序 * 思路: * 1.“自下而上”,将整个数组初始化建成一个最大堆 * 从最右下方的子堆——也就是以最后一个非叶子结点为根结点(lastRootindex)的子堆——开始, * 调整各个子堆使之为最大堆,最后使得整个数组成为一个最大堆 * 注意到从 0, 1, 2, ...lastRootIndex 的结点都是非叶子结点,都作为子堆需要调整 * 2.将当前堆顶元素(最大元素)与堆的最后一个元素交换,这样,当前最大值就排到末尾了 * 3.将堆的大小减1(排除最后一个元素),重新调整使得堆仍为最大堆,直到排序完毕 * 注意这时候的调整是“自上而下”,选举出当前的最大值放至堆顶 */ public static void heapsort(int[] array) { int lastIndex = array.length - 1; int lastRootIndex = (lastIndex - 1) / 2; for (int root = lastRootIndex; root >= 0; root--) { reheap(array, root, lastIndex); } for (int last = lastIndex; last >= 0; last--) { swap(array, 0, last); reheap(array, 0, last - 1); //堆大小减1 } System.out.println(Arrays.toString(array)); } /** * 调整使之仍为最大堆 * @param heap heap是这样一个“半堆”:执行调整操作前是一个最大堆。将最大堆的堆顶元素移除,并替换为最大堆的最后一个元素,成为“半堆” * @param rootIndex “半堆”的根 * @param lastIndex “半堆”的最后一个元素 */ public static void reheap2(int[] heap, int rootIndex, int lastIndex) { int orphan = heap[rootIndex]; int leftIndex = rootIndex * 2 + 1; boolean done = false; while (!done && leftIndex <= lastIndex) { int largeIndex = leftIndex; int rightIndex = leftIndex + 1; if (rightIndex <= lastIndex && heap[rightIndex] > heap[leftIndex]) { largeIndex = rightIndex; } if (heap[largeIndex] > orphan) { heap[rootIndex] = heap[largeIndex]; rootIndex = largeIndex; leftIndex = rootIndex * 2 + 1; } else { done = true; } } heap[rootIndex] = orphan; } public static void mergeSort(int[] c,int low,int high,int[] tmp){ if(low>=high)return; int mid=(high&low)+((high^low)>>1); mergeSort(c,low,mid,tmp); mergeSort(c,mid+1,high,tmp); merge(c,low,mid,high,tmp); } public static void merge(int[] c,int low,int mid,int high,int[] tmp){ int begin01=low; int end01=mid; int begin02=mid+1; int end02=high; int k=0; while(begin01<=end01&&begin02<=end02){ if(c[begin01]<c[begin02]){ tmp[k]=c[begin01]; k++; begin01++; }else{ tmp[k]=c[begin02]; k++; begin02++; } } while(begin01<=end01){ tmp[k++]=c[begin01++]; } while(begin02<=end02){ tmp[k++]=c[begin02++]; } System.arraycopy(tmp, 0, c,low, k); }
评论
3 楼
bylijinnan
2012-06-29
neyshule 写道
quicksort2是不是有问题,c[i]<=point?
嗯 我当时没考虑有相等的情况
2 楼
neyshule
2012-06-27
quicksort2是不是有问题,c[i]<=point?
1 楼
pywepe
2012-02-05
备忘,,希望没有错误
发表评论
-
二维数组(矩阵)对角线输出
2014-04-28 17:55 4677/** 二维数组 对角线输出 两个方向 例如对于数 ... -
线段树-poj1177-N个矩形求边长(离散化+扫描线)
2013-01-05 20:34 2957package com.ljn.base; import ... -
线段树-入门
2013-01-05 20:32 2155/** * 线段树入门 * 问题:已知线段 ... -
bitmap求哈密顿距离-给定N(1<=N<=100000)个五维的点A(x1,x2,x3,x4,x5),求两个点X(x1,x2,x3,x4,x5)和Y(
2012-12-27 21:12 2954import java.util.Random; / ... -
百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
2012-12-21 18:17 4102import java.util.Arrays; ... -
有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。
2012-12-07 14:32 3604import java.util.Random; i ... -
三色旗算法
2012-11-29 12:19 3795import java.util.Arrays; ... -
单调队列-用一个长度为k的窗在整数数列上移动,求窗里面所包含的数的最大值
2012-11-11 22:32 2357import java.util.LinkedList; ... -
据说是2012年10月人人网校招的一道笔试题-给出一个重物重量为X,另外提供的小砝码重量分别为1,3,9。。。3^N。 将重物放到天平左侧,问在两边如何添加砝码
2012-10-28 23:41 1971public class ScalesBalance { ... -
编程之美-分层遍历二叉树
2012-08-12 10:02 5901import java.util.ArrayList; ... -
编程之美-最短摘要的生成
2012-08-10 18:37 2472import java.util.HashMap; ... -
编程之美-计算字符串的相似度
2012-08-09 19:25 2889public class StringDistance ... -
编程之美-电话号码对应英语单词
2012-08-09 19:24 4214import java.util.Arrays; ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 2005import java.util.Arrays; imp ... -
编程之美-数组中最长递增子序列
2012-08-09 19:22 6import java.util.Arrays; imp ... -
xxx
2012-08-09 00:35 0package beautyOfCoding; public ... -
编程之美-子数组的最大和(二维)
2012-08-05 23:51 2255package beautyOfCoding; impo ... -
编程之美-子数组的最大乘积
2012-08-06 00:00 2272public class MaxProduct { ... -
编程之美-找符合条件的整数 用字符串来表示大整数避免溢出
2012-07-26 19:26 1840import java.util.LinkedList ... -
sudoku
2012-07-25 20:36 0package a; public class Sudoku ...
相关推荐
本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型的排序算法以及它们的C++实现,还有可能的可视化演示,帮助理解每种算法的工作原理。 首先,让我们逐一了解常见的排序...
在这个名为“各种排序算法总结(ppt)”的资料中,我们将会深入探讨多种常见的排序算法,包括它们的基本原理、优缺点以及实际应用。** 首先,我们要了解排序的目的是为了使数据有序,这在数据处理和分析中具有广泛...
### 各种排序算法的稳定性和时间复杂度总结 #### 排序算法的稳定性与时间复杂度概述 在计算机科学中,排序算法是基础且重要的组成部分,用于将一系列数据按照特定顺序排列。排序算法的效率通常由其时间复杂度决定...
快速排序通常被认为是最快的通用排序算法,但在某些特定情况下,如数据量较小或内存有限时,其他简单排序算法可能会更合适。因此,了解这些排序算法的原理和性能特点对于编写高效的代码至关重要。
本文总结了常见的查找算法和排序算法,包括顺序查找、二分查找、选择排序、冒泡排序、二分排序、插入排序、希尔排序、堆排序、归并排序等。 一、查找算法 1. 顺序查找(Sequential Search) 顺序查找是一种简单...
【排序算法总结】 排序是计算机科学中的一项基本操作,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本文将重点介绍八大排序算法,包括插入排序、希尔排序、交换排序、快速排序、选择排序、堆排序...
### 各种排序算法小结 #### 一、引言 排序算法是在计算机科学中非常基础且常用的一类算法。由于在实际应用中往往需要处理大量数据,因此对排序算法的效率有着较高要求。通常,我们会关注算法的时间复杂度来评估其...
《十大经典排序算法总结》 排序算法是计算机科学的基础,其设计思想和效率对软件的性能有着直接影响。本文主要探讨了十种经典的排序算法,包括它们的设计思路、优缺点以及适用场景,帮助我们理解排序算法的核心。 ...
以上就是对C#排序算法的一个总结,包含了最基础的冒泡排序及其优化版选择排序和快速排序,还包括了直接插入排序和折半插入排序,每种排序算法都有其特点和适用场景,理解这些排序算法可以帮助我们在不同的数据量和...
插入排序是一种简单的排序算法,其时间复杂度为O(n^2)。它通过将每个元素插入到已排序的部分中找到正确位置来工作,保持已排序部分的稳定性。当数组近乎有序时,插入排序表现出较好的性能。由于它主要涉及元素的...
一、问题描述 本项目旨在实现并比较六...总结,这个项目提供了对C语言实现的排序算法的深入理解和实践,通过对各种排序方法的性能测试,我们可以更好地理解它们在不同场景下的适用性,并为实际问题选择合适的排序算法。
### 常用排序算法总结 #### 一、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要...
插入排序是一种简单直观的排序算法,它将数组分为已排序和未排序两部分,然后逐个将未排序元素插入到已排序部分的正确位置。对于小规模或者接近有序的数据,插入排序的效率较高。其时间复杂度在最好情况下(已排序...
【Java各种排序算法详解】 排序算法是计算机科学中不可或缺的一部分,尤其在编程语言如Java中,理解并掌握各种排序算法的原理与应用至关重要。本文将详细介绍几种常见的Java排序算法,包括它们的工作机制、优缺点...
在本篇总结中,将探讨8种经典的排序算法,分别是冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、二叉树排序和基数排序。 1. 冒泡排序(Bubble Sort): 冒泡排序是一种简单的排序算法。它重复地遍历要...
### 数据结构中各种排序算法的比较与分析 #### 排序的基本概念 排序是指按照一定的规则(例如数值大小、字母顺序等)对一组数据进行重新排列的过程。在计算机科学领域,排序是一种基本的操作,用于组织数据以便...
下面列出了一些常见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳定;而后面三种排序相对于简单排序对空间的要求稍高一点,但时间效率却能稳定在很高的水平。...
"八种常见排序算法总结" 直接插入排序是一种简单的排序算法,它的思想是每次选择一个元素 K 插入到之前已排好序的部分 A[1…i]中,插入过程中 K 依次由后向前与 A[1…i]中的元素进行比较。若发现 A[x]>=K,则将 K ...
在各种排序算法中,每种算法都有其特点和应用场景。本文将对10种经典的排序算法进行总结,并对每种算法的时间复杂度、空间复杂度和适用场景进行分析。 一、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法...
总结,排序算法是计算机科学中的基础工具,理解和掌握各种排序算法的原理、优缺点以及应用场景,对于提升编程技能和解决实际问题具有重要意义。通过对"排序.c"文件的分析,我们可以更直观地理解这些理论知识,并将其...