- 浏览: 195331 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
only_java:
博主,你好。感谢这篇你的这篇文章,我的问题是跟你一样,也是在跑 ...
JVM Crash分析 -
shuofenglxy:
1 确保程序运行时没有更新程序需要的相关jar包。2 确保程序 ...
JVM Crash分析 -
renduly:
# A fatal error has been detect ...
JVM Crash分析 -
shuofenglxy:
renduly 写道博主好。这两天我在公司程序也出现了类似的问 ...
JVM Crash分析 -
renduly:
博主好。这两天我在公司程序也出现了类似的问题。博主能否说的详细 ...
JVM Crash分析
这里是以前写的算法总结了。照搬过来而已。
package SortSet; import java.math.*; public class SortSetTest { // 插入排序 public static float[] InsertSort(float x[]) { float temp; int tag; for (int i = 0; i < x.length; i++) { temp = x[i]; tag = i; while (tag > 0 && x[tag - 1] >= temp) { x[tag] = x[tag - 1]; tag--; } x[tag] = temp; } return x; } // 冒泡排序 public static float[] BubbleSort(float x[]) { for (int i = x.length - 1; i > 1; i--) { for (int j = 0; j < i; j++) if (x[j] > x[j + 1]) { float temp = x[j]; x[j] = x[j + 1]; x[j + 1] = temp; } } return x; } // 快速排序 public static void QuickSort(float x[], int left, int right) { int i = left, j = right; float pivot, temp; pivot = x[(left + right) / 2]; if (i < j) { do { while (x[i] <= pivot && i < right) { i++; } while (x[j] >= pivot && j > left) { j--; } if (i <= j) { temp = x[i]; x[i] = x[j]; x[j] = temp; i++; j--; } } while (i <= j); } if (j > left) QuickSort(x, left, j); if (i < right) QuickSort(x, i, right); } // shell排序 public static void ShellSort(float[] x) { for (int i = x.length / 2; i > 2; i /= 2) { for (int j = 0; j < i; j++) insertSort(x, j, i); } insertSort(x, 0, 1); } public static void insertSort(float[] x, int start, int incr) { float temp; for (int i = start + incr; i < x.length; i += incr) { for (int j = i; (j >= incr) && (x[j] < x[j - incr]); j -= incr) { temp = x[j]; x[j] = x[j - incr]; x[j - incr] = temp; } } } // 合并排序 public static void mergeSort(float[] x, float[] temp, int l, int r) { int mid = (l + r) / 2; if (l == r) return; mergeSort(x, temp, l, mid); mergeSort(x, temp, mid + 1, r); for (int i = l; i < r + 1; i++) { temp[i] = x[i]; } int i1 = l; int i2 = mid + 1; for (int cur = l; cur <= r; cur++) { if (i1 == mid + 1) x[cur] = temp[i2++]; else if (i2 > r) x[cur] = temp[i1++]; else if (temp[i1] <= temp[i2]) x[cur] = temp[i1++]; else x[cur] = temp[i2++]; } } // 桶排序 public static float[] BucketSort(float[] x) { float t; float temp[][] = new float[10][100000]; for (int i = 0; i < 10; i++) for (int fx = 0; fx < 100000; fx++) { temp[i][fx] = -1; } int j[] = new int[10]; int k; for (int p = 0; p < 10; p++) j[p] = 0; for (int i = 0; i < x.length; i++) { // 划分桶 k = (int) Math.floor(x[i] * 10); temp[k][j[k]] = x[i]; j[k]++; } for (int m = 0; m < 10; m++) { // 桶内插入排序 for (int f = 0; f < temp[m].length; f++) { if (temp[m][f] == -1) break; t = temp[m][f]; int tag = f; while (tag > 0 && temp[m][tag - 1] > t) { temp[m][tag] = temp[m][tag - 1]; tag--; } temp[m][f] = t; } } int s = 0; for (int m = 0; m < 10; m++) { // 写回原数组 for (int f = 0;; f++) { if (temp[m][f] == -1) break; x[s] = temp[m][f]; s++; } } return x; } public static void main(String args[]) { float a[] = new float[100000]; for (int i = 0; i < 100000; i++) { a[i] = (float) Math.random(); } float a1[][] = new float[6][10], a2[][] = new float[6][1000], a3[][] = new float[6][10000], a4[][] = new float[6][100000]; for (int j = 0; j < 6; j++) for (int i = 0; i < 10; i++) a1[j][i] = a[i]; for (int j = 0; j < 6; j++) for (int i = 0; i < 1000; i++) a2[j][i] = a[i]; for (int j = 0; j < 6; j++) for (int i = 0; i < 10000; i++) a3[j][i] = a[i]; for (int j = 0; j < 6; j++) for (int i = 0; i < 100000; i++) a4[j][i] = a[i]; // N=10; System.out.println("测试数值为10时,各个排序的结果如下(对同一数组):"); System.out.println("原数组,插入排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); InsertSort(a1[0]); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); System.out.println("原数组,冒泡排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); BubbleSort(a1[1]); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[1].length; pp++) System.out.print(a1[1][pp] + " "); System.out.println(); System.out.println("原数组,快速排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); QuickSort(a1[2], 0, a1[2].length - 1); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[2].length; pp++) System.out.print(a1[2][pp] + " "); System.out.println(); System.out.println("原数组,希尔排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); ShellSort(a1[3]); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[3].length; pp++) System.out.print(a1[3][pp] + " "); System.out.println(); System.out.println("原数组,合并排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); float[] temp1 = new float[10]; mergeSort(a1[4], temp1, 0, a1[4].length - 1); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[4].length; pp++) System.out.print(a1[4][pp] + " "); System.out.println(); System.out.println("原数组,桶排序:"); for (int pp = 0; pp < a1[0].length; pp++) System.out.print(a1[0][pp] + " "); System.out.println(); BucketSort(a1[5]); System.out.println("排序后数组:"); for (int pp = 0; pp < a1[5].length; pp++) System.out.print(a1[5][pp] + " "); System.out.println(); // N=1000; long c = System.currentTimeMillis(); InsertSort(a2[0]); long b1 = System.currentTimeMillis(); System.out.println("N=1000插入排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BubbleSort(a2[1]); b1 = System.currentTimeMillis(); System.out.println("N=1000时冒泡排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); QuickSort(a2[2], 0, a2[2].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=1000时快速排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); ShellSort(a2[3]); b1 = System.currentTimeMillis(); System.out.println("N=1000时希尔排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); float[] temp2 = new float[1000]; mergeSort(a2[4], temp2, 0, a2[4].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=1000时合并排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BucketSort(a2[5]); b1 = System.currentTimeMillis(); System.out.println("N=1000时桶排序时间为:" + (b1 - c)); // N=10000; c = System.currentTimeMillis(); InsertSort(a3[0]); b1 = System.currentTimeMillis(); System.out.println("N=10000插入排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BubbleSort(a3[1]); b1 = System.currentTimeMillis(); System.out.println("N=10000时冒泡排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); QuickSort(a3[2], 0, a3[2].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=10000时快速排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); ShellSort(a3[3]); b1 = System.currentTimeMillis(); System.out.println("N=10000时希尔排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); float[] temp3 = new float[10000]; mergeSort(a3[4], temp3, 0, a3[4].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=10000时合并排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BucketSort(a3[5]); b1 = System.currentTimeMillis(); System.out.println("N=10000时桶排序时间为:" + (b1 - c)); // N=100000; c = System.currentTimeMillis(); InsertSort(a4[0]); b1 = System.currentTimeMillis(); System.out.println("N=100000插入排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BubbleSort(a4[1]); b1 = System.currentTimeMillis(); System.out.println("N=100000时冒泡排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); QuickSort(a4[2], 0, a4[2].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=100000时快速排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); ShellSort(a4[3]); b1 = System.currentTimeMillis(); System.out.println("N=100000时希尔排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); float[] temp4 = new float[100000]; mergeSort(a4[4], temp4, 0, a4[4].length - 1); b1 = System.currentTimeMillis(); System.out.println("N=100000时合并排序时间为:" + (b1 - c)); c = System.currentTimeMillis(); BucketSort(a4[5]); b1 = System.currentTimeMillis(); System.out.println("N=100000时桶排序时间为:" + (b1 - c)); } }
发表评论
-
数组查值
2011-09-27 16:42 813问题描述:{4,5,7,8,1,2} 找值为K的元素。 两种 ... -
全排列 递归式
2011-09-27 15:18 870简单的整理一下全排列思路。全部遍历,打印前筛选条件。全部遍历则 ... -
简单的四则运算计算器
2011-09-27 11:27 872这是一个简单的四则运算计算器,不支持括号,没有做乘法的越 ... -
ZZ并查集
2011-02-22 15:40 891原文出处:http://blog.si ... -
ZZ那些优雅的数据结构(1) : BloomFilter——大规模数据处理利器
2011-02-21 14:39 1095原文来自:http://www.cnblogs.com/hea ... -
矩阵链乘法算法讲解
2011-02-15 15:57 4380矩阵链乘是一个计算 ... -
把二元查找树转变成排序的双向链表
2011-02-14 19:59 2014分析:二叉树中序遍历即可得到一个有序的结果,只要按照中序遍历的 ... -
A Simple Ordered Hashtable
2011-02-11 15:26 965原文来自: http://wuhua.iteye.com/bl ... -
递归总结二 汉诺塔问题
2011-02-07 19:38 1138汉诺塔是貌似递归入门的引导题目,把这个过程写下来,mark一下 ... -
递归总结一 全排列问题
2011-02-07 18:48 1574全排列问题:这是描述 ... -
二叉树和红黑树的java实现
2011-02-05 13:11 1602二叉查找树代码大致如下: 二叉树节点类: pa ... -
LIS 最长递增子序列算法总结
2011-02-05 12:53 1494这里包含了三种求得递增子序列的算法。 是以前写的代码,这里就 ... -
求1的个数问题
2011-01-25 16:14 1163又是一年笔试时,很多学弟们开始笔试了。今天学弟问求一个int数 ... -
消除递归典型应用2------N阶台阶问题
2011-01-25 16:12 1389问题描述:一个人可以一步走1或2或3级台阶,问到N级台阶共有多 ... -
左右手法则的典型应用---字符串逆序
2011-01-25 16:10 1182问题:输入 I am a boy 输出boy a am I ... -
一个正整数拆分为连续的几个整数之和
2011-01-25 16:08 2598import java.util.Scanner; pu ... -
斐波那契序列的基本实现
2011-01-25 16:07 1676今天实在没事干,刚好别人问了我下斐波那契面试怎么回答。就 ... -
矩阵型数据 顺时针打印
2011-01-25 15:28 1413输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 ...
相关推荐
一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序
本文将详细解析标题中提及的五种排序算法:位与、选择、冒泡、插入以及qsort,并结合在VC6.0环境下进行编译实践的情况。 1. **位与排序**: 位与操作符(`&`)在某些特定场景下可用于排序,例如在整数数组中,通过...
几种常见的排序算法是编程领域中基础且重要的知识点,它们各自有不同的特点和适用场景。本文将详细介绍这些算法,并分析其效率。 一、冒泡排序 冒泡排序是一种简单的排序算法,通过不断交换相邻的两个元素来逐步...
几种常见排序 基于比较的排序算法: 下界是 nlgn 1.1 SelectionSort:每次选出最下的元素,放在当前循环最左边的位置。 1.2 BubbleSort:每次比较相邻的两个数,使得最大的数像气泡一样冒到最右边。 1. 3 Insertion...
几种常见排序算法JAVA实现.pdf
本文将深入探讨六种常见的排序算法:选择排序、插入排序、冒泡排序、希尔排序、快速排序以及归并排序,它们都是编程实践中不可或缺的基础知识。 1. **选择排序(Selection Sort)**: 选择排序的工作原理是每一次...
几种常见排序算法(JAVA实现).pdf
本文将深入探讨由C语言实现的几种常见排序算法,包括它们的基本原理、实现细节和性能特点。 首先,让我们从最经典的排序算法——冒泡排序(Bubble Sort)开始。冒泡排序通过不断地交换相邻的不正确顺序的元素来逐步...
包括冒泡排序,选择排序,插入排序,希尔排序,快速排序等常用排序算法的实现并耗时比较
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 在本文中,我们将设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数,以取得直观感受。内部排序算法是指在内存中...
数据结构中几种常见的排序算法之比较,比较常见的冒泡排序、快速排序等
这里我们将深入探讨几种最常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序以及归并排序。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序算法之一,它通过不断地比较相邻元素并交换位置来实现...
根据提供的文件信息,本文将详细介绍如何使用Java语言来实现几种常见的排序算法,包括插入排序(Insert Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及希尔排序(Shell Sort)。这些排序算法在...
这份资料"用php实现几种常见的排序算法共6页.pdf.zip"显然包含了关于如何使用PHP实现几种常见排序算法的教程或笔记。 首先,让我们回顾一下几种常见的排序算法,并讨论它们在PHP中的实现: 1. **冒泡排序**...
本文将详细讲解标题中提到的几种排序算法:插入排序、堆排序,以及快速排序和计数排序,这些都是在实际编程中经常使用的算法。 1. **插入排序**(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作...
Java几种常见的排序算法
### 几种内部排序算法总结 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,...