- 浏览: 929220 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 博客分类:
- DataStructures
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html
http://yiyickf.iteye.com/blog/1047010
本文思路部分来源于上篇文章,但测得的结果似乎不大相同,不知是因为java的缘故还是因为我算法的缘故,欢迎拍砖。
复习排序,顺便比下各种算法的速度,榜单如下:
1、冒泡排序
2、简单选择排序
3、直接插入排序
4、折半插入排序
5、希尔排序
6、堆排序
7、归并排序
8、快速排序
当然这是慢速排行,哈哈~~
直接上图:单位毫秒
数量
冒泡排序
简单选择排序
直接插入排序
折半插入排序
希尔排序
堆排序
归并排序
快速排序
10000个
1578
1250
672
250
0
15
16
0
15000个
3453
2765
1563
531
16
15
16
0
20000个
6140
4547
2453
828
16
16
15
16
25000个
10079
7171
3969
1313
31
16
15
16
30000个
14641
10313
5578
1906
31
31
16
31
35000个
20141
14328
7890
2563
31
31
32
15
40000个
25766
18359
10094
3422
47
31
31
32
45000个
32469
24063
13062
4359
47
47
31
47
由于"希尔排序","堆排序","归并排序","快速排序"太快,以至于在上图几乎是条直线,故有了下面转为他们准备的加强版
数量
希尔排序
堆排序
归并排序
快速排序
100000个
172
140
110
93
200000个
469
406
235
234
300000个
812
703
422
375
400000个
1125
1031
516
531
500000个
1406
1282
719
656
600000个
1828
1703
860
859
700000个
2531
2063
1000
968
800000个
2735
2453
1140
1188
900000个
3047
2843
1391
1266
1000000个
3375
3187
1516
1422
1100000个
3922
3500
1625
1609
1200000个
4421
3954
1969
1812
1300000个
4797
4422
2000
1953
1400000个
5391
4797
2547
2094
1500000个
5437
5219
2625
2328
1600000个
6203
5546
2469
2485
1700000个
6532
5953
2844
2672
1800000个
7125
6421
2984
2844
补上代码:
Java代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 插入排序:直接插入排序、折半插入排序和系尔排序
* 交换排序:冒泡排序和快速排序
* 选择排序:简单选择排序和堆排序
* 归并排序:归并排序
*
* 基本思想
* 插入排序:将第N个记录插入到前面(N-1)个有序的记录当中。
* 交换排序:按照某种顺序比较两个记录的关键字大小,然后根据需要交换两个记录的位置。
* 选择排序:根据某种方法选择一个关键字最大的记录或者关键字最小的记录,放到适当的位置。
*
* 排序方法比较
* 排序方法 平均时间 最坏时间 辅助存储
* 直接插入排序 O(N2) O(N2) O(1)
* 起泡排序 O(N2) O(N2) O(1)
* 快速排序 O(Nlog2N) O(N2) O(Nlog2N)
* 简单选择排序 O(N2) O(N2) O(1)
* 堆排序 O(Nlog2N) O(Nlog2N) O(1)
* 归并排序 O(Nlog2N) O(Nlog2N) O(n)
* 基数排序 O(d(n+radix)) O(d(n+radix)) O(radix)
*
*
*
* @author Administrator
*
*/
public class SortTest {
public static void main(String[] args)throws Exception {
//测试排序是否正确
//String[] testErr=new String[]{"冒泡排序","简单选择排序","直接插入排序","折半插入排序","系尔排序","堆排序","归并排序","快速排序"};
//new SortTest().testErr(testErr);
//排序1(全部)
String[] strs=new String[]{"冒泡排序","简单选择排序","直接插入排序","折半插入排序","希尔排序","堆排序","归并排序","快速排序"};
new SortTest().test(strs,10000,50000,5000);
//排序2(加强)
String[] strs2=new String[]{"希尔排序","堆排序","归并排序","快速排序"};
new SortTest().test(strs2,100000,1900000,100000);
}
private void testErr(String[] strings) throws Exception{
//System.out.println(Arrays.toString(old));
System.out.println(Arrays.toString(strings));
Number[] old=getRundom(50);
Integer[] oo={1,2,3,3,2,21,5,6,7,78,5,65,8,7,6,6,6,6,6,9,56544,354,32,4,456,8,89,-9,0,3,243,-321,321,-3,-2,21};
old=oo;
for(String s:strings){
Number[] testNum=Arrays.copyOf(old, old.length);
long begin=System.currentTimeMillis();
SortTest.class.getMethod(s, Number[].class).invoke(this, (Object)testNum);
long end=System.currentTimeMillis();
System.out.println(s+":"+(end-begin)+"\t");
System.out.println(Arrays.toString(testNum));
}
System.out.println();
}
private void test(String[] strings,long begin,long end,long step) throws Exception{
System.out.print("数量\t");
for(String str:strings){
System.out.print(str+"\t");
}
System.out.println();
for(long i=begin;i<end;i=i+step){
System.out.print(i+"个\t");
Number[] old=getRundom(i);
for(String s:strings){
Number[] testNum=Arrays.copyOf(old, old.length);
long beginTime=System.currentTimeMillis();
SortTest.class.getMethod(s, Number[].class).invoke(this, (Object)testNum);
long endTime=System.currentTimeMillis();
System.out.print((endTime-beginTime)+"\t");
//System.out.println(Arrays.toString(testNum));
}
System.out.println();
}
}
private static Integer[] getRundom(long num) {
List<Integer> list=new ArrayList<Integer>();
for(long i=0;i<num;i++){
int k;
if(Math.random()>0.5){
k=(int)(Math.random()*Integer.MAX_VALUE);
}else{
k=(int)(Math.random()*Integer.MIN_VALUE);
}
list.add(k);
}
return list.toArray(new Integer[list.size()]);
}
/**
* 插入排序————直接插入排序
* @param data
*/
public static void 直接插入排序(Number[] data)
{
Number tmp=null ;
for(int i=1;i<data.length;i++){
tmp = data[i];
int j=i-1;
while(j>=0 && tmp.doubleValue()<data[j].doubleValue()){
data[j+1]=data[j];
j--;
}
data[j+1]=tmp;
}
}
/**
* 插入排序————折半插入排序
* @param data
*/
public static void 折半插入排序(Number[] data)
{
Number tmp=null ;
for(int i=1;i<data.length;i++){
tmp = data[i];
int smallpoint=0;
int bigpoint=i-1;
while(bigpoint>=smallpoint){
int mid=(smallpoint+bigpoint)/2;
if(tmp.doubleValue()>data[mid].doubleValue()){
smallpoint=mid+1;
}else{
bigpoint=mid-1;
}
}
for(int j=i;j>smallpoint;j--){
data[j]=data[j-1];
}
data[bigpoint+1]=tmp;
}
}
/**
* 插入排序————希尔排序
* @param data
*/
public static void 希尔排序(Number[] data)
{
int span=data.length/7;
if(span==0)span=1;
while(span>=1){
for(int i=0;i<span;i++){
for(int j=i;j<data.length;j=j+span){
//组内直接插入排序
int p = j-span;
Number temp = data[j];
while( p >=0 && data[p].doubleValue() > temp.doubleValue()){
data[p+span] = data[p];
p -=span;
}
data[p + span] = temp;
}
}
span=span/2;
}
}
/**
* 交换排序————冒泡排序
*
* @param data
*/
public static void 冒泡排序(Number[] data)
{
for (int i = 0; i < data.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i-1; j++) {
if (data[j].doubleValue()> data[j + 1].doubleValue()) {
//交换相邻两个数
swap(data, j, j + 1);
}
}
}
}
/**
* 交换排序————快速排序
* @param data
*/
public static void 快速排序(Number[] data)
{
QuickSort(data,0,data.length-1);
}
private static void QuickSort(Number[] data, int begin, int end) {
// System.out.println(begin+":"+end);
if(begin<end){
//取中点
int mid=(begin+end)/2;
if(data[end].doubleValue()<data[begin].doubleValue()){
swap(data, end, begin);
}
if(data[end].doubleValue()<data[mid].doubleValue()){
swap(data, end, mid);
}
if(data[mid].doubleValue()<data[begin].doubleValue()){
swap(data, mid, begin);
}
swap(data, mid, begin);
// System.out.println(Arrays.toString(Arrays.copyOfRange(data, begin, end)) );
int min=begin+1;
int big=end;
while(true){
while(min<big && data[min].doubleValue()<data[begin].doubleValue()){min++;}
while(min<big && data[big].doubleValue()>=data[begin].doubleValue()){big--;}
if(min>=big){
break;
}
swap(data, min, big);
}
if(data[begin].doubleValue()>data[min].doubleValue()){
swap(data, begin, min);
}
if(min>1)
QuickSort(data,begin,min-1);
//if(min<end)
QuickSort(data,min,end);
}
}
/**
* 选择排序————简单选择排序
* @param data
*/
public static void 简单选择排序(Number[] data)
{
for (int i = 0; i < data.length-1; i++) {
int smallPoint=i;
for (int j = i+1; j < data.length; j++) {
if (data[smallPoint].doubleValue()> data[j].doubleValue()) {
smallPoint=j;
}
}
swap(data, i, smallPoint);
}
}
/**
* 选择排序————堆排序
* @param data
*/
public static void 堆排序(Number[] data)
{
int n = data.length;
for(int i=n/2;i>=0;i--){
keepHeap(data, n, i);
}
while (n > 0) {
swap(data, 0, n-1);
keepHeap(data, --n, 0);
}
}
private static void keepHeap(Number[] a, int n, int i) {
Number x = a[i];
int j = 2 * i + 1;
while (j <= n - 1) {
if (j < n - 1 && a[j].doubleValue() < a[j + 1].doubleValue())
++j;
if (a[j].doubleValue() > x.doubleValue()) {
a[i] = a[j];
i = j;
j = 2 * i ;
} else{
break;
}
}
a[i] = x;
}
/**
* 归并排序法————归并排序
* @param data
*/
public static void 归并排序(Number[] data)
{
Number[] result = merge_sort(data,0,data.length-1);
for(int i=0;i<result.length;i++){
data[i]=result[i];
}
}
private static Number[] merge_sort(Number[] array, int start, int end){
Number[] result = new Number[end-start+1];
if(start< end){
int mid= (start+end)/2;
Number[] left= merge_sort(array, start, mid);
Number[] right = merge_sort(array, mid+1, end);
result= merge(left,right);
} else if (start == end) {
result[0] = array[start];
return result;
}
return result;
}
private static Number[] merge(Number[] left, Number[] right) {
Number[] result = new Number[left.length+right.length];
int i=0;
int j=0;
int k=0;
while(i< left.length&&j< right.length){
if(left[i].doubleValue()< right[j].doubleValue()){
result[k++] = left[i++];
}else{
result[k++] = right[j++];
}
}
while(i< left.length){
result[k++] = left[i++];
}
while (j< right.length) {
result[k++]= right[j++];
}
return result;
}
/**
* 交换数组中指定的两元素的位置
* @param data
* @param x
* @param y
*/
private static void swap(Number[] data, int x, int y) {
Number temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
http://yiyickf.iteye.com/blog/1047010
本文思路部分来源于上篇文章,但测得的结果似乎不大相同,不知是因为java的缘故还是因为我算法的缘故,欢迎拍砖。
复习排序,顺便比下各种算法的速度,榜单如下:
1、冒泡排序
2、简单选择排序
3、直接插入排序
4、折半插入排序
5、希尔排序
6、堆排序
7、归并排序
8、快速排序
当然这是慢速排行,哈哈~~
直接上图:单位毫秒
数量
冒泡排序
简单选择排序
直接插入排序
折半插入排序
希尔排序
堆排序
归并排序
快速排序
10000个
1578
1250
672
250
0
15
16
0
15000个
3453
2765
1563
531
16
15
16
0
20000个
6140
4547
2453
828
16
16
15
16
25000个
10079
7171
3969
1313
31
16
15
16
30000个
14641
10313
5578
1906
31
31
16
31
35000个
20141
14328
7890
2563
31
31
32
15
40000个
25766
18359
10094
3422
47
31
31
32
45000个
32469
24063
13062
4359
47
47
31
47
由于"希尔排序","堆排序","归并排序","快速排序"太快,以至于在上图几乎是条直线,故有了下面转为他们准备的加强版
数量
希尔排序
堆排序
归并排序
快速排序
100000个
172
140
110
93
200000个
469
406
235
234
300000个
812
703
422
375
400000个
1125
1031
516
531
500000个
1406
1282
719
656
600000个
1828
1703
860
859
700000个
2531
2063
1000
968
800000个
2735
2453
1140
1188
900000个
3047
2843
1391
1266
1000000个
3375
3187
1516
1422
1100000个
3922
3500
1625
1609
1200000个
4421
3954
1969
1812
1300000个
4797
4422
2000
1953
1400000个
5391
4797
2547
2094
1500000个
5437
5219
2625
2328
1600000个
6203
5546
2469
2485
1700000个
6532
5953
2844
2672
1800000个
7125
6421
2984
2844
补上代码:
Java代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 插入排序:直接插入排序、折半插入排序和系尔排序
* 交换排序:冒泡排序和快速排序
* 选择排序:简单选择排序和堆排序
* 归并排序:归并排序
*
* 基本思想
* 插入排序:将第N个记录插入到前面(N-1)个有序的记录当中。
* 交换排序:按照某种顺序比较两个记录的关键字大小,然后根据需要交换两个记录的位置。
* 选择排序:根据某种方法选择一个关键字最大的记录或者关键字最小的记录,放到适当的位置。
*
* 排序方法比较
* 排序方法 平均时间 最坏时间 辅助存储
* 直接插入排序 O(N2) O(N2) O(1)
* 起泡排序 O(N2) O(N2) O(1)
* 快速排序 O(Nlog2N) O(N2) O(Nlog2N)
* 简单选择排序 O(N2) O(N2) O(1)
* 堆排序 O(Nlog2N) O(Nlog2N) O(1)
* 归并排序 O(Nlog2N) O(Nlog2N) O(n)
* 基数排序 O(d(n+radix)) O(d(n+radix)) O(radix)
*
*
*
* @author Administrator
*
*/
public class SortTest {
public static void main(String[] args)throws Exception {
//测试排序是否正确
//String[] testErr=new String[]{"冒泡排序","简单选择排序","直接插入排序","折半插入排序","系尔排序","堆排序","归并排序","快速排序"};
//new SortTest().testErr(testErr);
//排序1(全部)
String[] strs=new String[]{"冒泡排序","简单选择排序","直接插入排序","折半插入排序","希尔排序","堆排序","归并排序","快速排序"};
new SortTest().test(strs,10000,50000,5000);
//排序2(加强)
String[] strs2=new String[]{"希尔排序","堆排序","归并排序","快速排序"};
new SortTest().test(strs2,100000,1900000,100000);
}
private void testErr(String[] strings) throws Exception{
//System.out.println(Arrays.toString(old));
System.out.println(Arrays.toString(strings));
Number[] old=getRundom(50);
Integer[] oo={1,2,3,3,2,21,5,6,7,78,5,65,8,7,6,6,6,6,6,9,56544,354,32,4,456,8,89,-9,0,3,243,-321,321,-3,-2,21};
old=oo;
for(String s:strings){
Number[] testNum=Arrays.copyOf(old, old.length);
long begin=System.currentTimeMillis();
SortTest.class.getMethod(s, Number[].class).invoke(this, (Object)testNum);
long end=System.currentTimeMillis();
System.out.println(s+":"+(end-begin)+"\t");
System.out.println(Arrays.toString(testNum));
}
System.out.println();
}
private void test(String[] strings,long begin,long end,long step) throws Exception{
System.out.print("数量\t");
for(String str:strings){
System.out.print(str+"\t");
}
System.out.println();
for(long i=begin;i<end;i=i+step){
System.out.print(i+"个\t");
Number[] old=getRundom(i);
for(String s:strings){
Number[] testNum=Arrays.copyOf(old, old.length);
long beginTime=System.currentTimeMillis();
SortTest.class.getMethod(s, Number[].class).invoke(this, (Object)testNum);
long endTime=System.currentTimeMillis();
System.out.print((endTime-beginTime)+"\t");
//System.out.println(Arrays.toString(testNum));
}
System.out.println();
}
}
private static Integer[] getRundom(long num) {
List<Integer> list=new ArrayList<Integer>();
for(long i=0;i<num;i++){
int k;
if(Math.random()>0.5){
k=(int)(Math.random()*Integer.MAX_VALUE);
}else{
k=(int)(Math.random()*Integer.MIN_VALUE);
}
list.add(k);
}
return list.toArray(new Integer[list.size()]);
}
/**
* 插入排序————直接插入排序
* @param data
*/
public static void 直接插入排序(Number[] data)
{
Number tmp=null ;
for(int i=1;i<data.length;i++){
tmp = data[i];
int j=i-1;
while(j>=0 && tmp.doubleValue()<data[j].doubleValue()){
data[j+1]=data[j];
j--;
}
data[j+1]=tmp;
}
}
/**
* 插入排序————折半插入排序
* @param data
*/
public static void 折半插入排序(Number[] data)
{
Number tmp=null ;
for(int i=1;i<data.length;i++){
tmp = data[i];
int smallpoint=0;
int bigpoint=i-1;
while(bigpoint>=smallpoint){
int mid=(smallpoint+bigpoint)/2;
if(tmp.doubleValue()>data[mid].doubleValue()){
smallpoint=mid+1;
}else{
bigpoint=mid-1;
}
}
for(int j=i;j>smallpoint;j--){
data[j]=data[j-1];
}
data[bigpoint+1]=tmp;
}
}
/**
* 插入排序————希尔排序
* @param data
*/
public static void 希尔排序(Number[] data)
{
int span=data.length/7;
if(span==0)span=1;
while(span>=1){
for(int i=0;i<span;i++){
for(int j=i;j<data.length;j=j+span){
//组内直接插入排序
int p = j-span;
Number temp = data[j];
while( p >=0 && data[p].doubleValue() > temp.doubleValue()){
data[p+span] = data[p];
p -=span;
}
data[p + span] = temp;
}
}
span=span/2;
}
}
/**
* 交换排序————冒泡排序
*
* @param data
*/
public static void 冒泡排序(Number[] data)
{
for (int i = 0; i < data.length; i++) {
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i-1; j++) {
if (data[j].doubleValue()> data[j + 1].doubleValue()) {
//交换相邻两个数
swap(data, j, j + 1);
}
}
}
}
/**
* 交换排序————快速排序
* @param data
*/
public static void 快速排序(Number[] data)
{
QuickSort(data,0,data.length-1);
}
private static void QuickSort(Number[] data, int begin, int end) {
// System.out.println(begin+":"+end);
if(begin<end){
//取中点
int mid=(begin+end)/2;
if(data[end].doubleValue()<data[begin].doubleValue()){
swap(data, end, begin);
}
if(data[end].doubleValue()<data[mid].doubleValue()){
swap(data, end, mid);
}
if(data[mid].doubleValue()<data[begin].doubleValue()){
swap(data, mid, begin);
}
swap(data, mid, begin);
// System.out.println(Arrays.toString(Arrays.copyOfRange(data, begin, end)) );
int min=begin+1;
int big=end;
while(true){
while(min<big && data[min].doubleValue()<data[begin].doubleValue()){min++;}
while(min<big && data[big].doubleValue()>=data[begin].doubleValue()){big--;}
if(min>=big){
break;
}
swap(data, min, big);
}
if(data[begin].doubleValue()>data[min].doubleValue()){
swap(data, begin, min);
}
if(min>1)
QuickSort(data,begin,min-1);
//if(min<end)
QuickSort(data,min,end);
}
}
/**
* 选择排序————简单选择排序
* @param data
*/
public static void 简单选择排序(Number[] data)
{
for (int i = 0; i < data.length-1; i++) {
int smallPoint=i;
for (int j = i+1; j < data.length; j++) {
if (data[smallPoint].doubleValue()> data[j].doubleValue()) {
smallPoint=j;
}
}
swap(data, i, smallPoint);
}
}
/**
* 选择排序————堆排序
* @param data
*/
public static void 堆排序(Number[] data)
{
int n = data.length;
for(int i=n/2;i>=0;i--){
keepHeap(data, n, i);
}
while (n > 0) {
swap(data, 0, n-1);
keepHeap(data, --n, 0);
}
}
private static void keepHeap(Number[] a, int n, int i) {
Number x = a[i];
int j = 2 * i + 1;
while (j <= n - 1) {
if (j < n - 1 && a[j].doubleValue() < a[j + 1].doubleValue())
++j;
if (a[j].doubleValue() > x.doubleValue()) {
a[i] = a[j];
i = j;
j = 2 * i ;
} else{
break;
}
}
a[i] = x;
}
/**
* 归并排序法————归并排序
* @param data
*/
public static void 归并排序(Number[] data)
{
Number[] result = merge_sort(data,0,data.length-1);
for(int i=0;i<result.length;i++){
data[i]=result[i];
}
}
private static Number[] merge_sort(Number[] array, int start, int end){
Number[] result = new Number[end-start+1];
if(start< end){
int mid= (start+end)/2;
Number[] left= merge_sort(array, start, mid);
Number[] right = merge_sort(array, mid+1, end);
result= merge(left,right);
} else if (start == end) {
result[0] = array[start];
return result;
}
return result;
}
private static Number[] merge(Number[] left, Number[] right) {
Number[] result = new Number[left.length+right.length];
int i=0;
int j=0;
int k=0;
while(i< left.length&&j< right.length){
if(left[i].doubleValue()< right[j].doubleValue()){
result[k++] = left[i++];
}else{
result[k++] = right[j++];
}
}
while(i< left.length){
result[k++] = left[i++];
}
while (j< right.length) {
result[k++]= right[j++];
}
return result;
}
/**
* 交换数组中指定的两元素的位置
* @param data
* @param x
* @param y
*/
private static void swap(Number[] data, int x, int y) {
Number temp = data[x];
data[x] = data[y];
data[y] = temp;
}
}
发表评论
-
java的8种排序
2013-03-19 22:51 924url:http://www.iteye.com/topic ... -
排序算法分析之冒泡排序
2012-05-25 11:27 1497冒泡排序(Bubble Sort)是一种简单的排序算法。它重复 ... -
想对集合说的一些话
2012-04-24 00:11 971Java的集合很有用,自己看过很多了,但是总是感觉很模糊,用起 ... -
数据结构(c语言)
2012-04-19 21:29 11031. 经典算法 单链表:遍 ... -
java中数据结构二分查法
2012-04-20 00:19 1282数据结构和算法是一个程序的灵魂,优化程序的主要手段。在查询里, ... -
插入排序
2012-04-21 21:16 889插入排序无非就是在原来已经排好序的基础上再一个个添加元素,每次 ... -
java经典算法40题
2012-04-14 12:16 1660排序算法:http://www.cnblogs.com/mor ... -
数据结构与算法基础
2012-03-29 09:31 11831.arraylist(底层数组实现) ... -
2012/3/27----归并排序
2012-03-27 13:58 965通过使用分治算法的思想来对数组进行排序(这里叫做归并排序),分 ... -
算法学习一之常见的七大排序算法
2012-03-19 09:40 1441算法之排序 十三个经典 ... -
深入arraylist,linkedlist,hashmap,hashset源码(2012/3/18)
2012-03-18 16:30 15081.冒泡排序 2.arraylist存 ... -
快速排序算法原理与实现/交换排序
2012-03-19 09:45 1482快速排序的大致思想为取到中间位置的元素,其他元素和其一一比较, ...
相关推荐
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
10种排序算法代码+综合比较代码(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序),其中不仅有各种排序算法的代码,还包含10种代码在关键字...
七种排序算法(包括直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,归并排序) 还有两道题 1./*设计并实现一个有效的对n个整数重排的算法,使得所有负数位于非负数之前,给出算法的性能...
老师留的算法作业包含了 冒泡,选择,快速,归并,插入,折半插入,希尔,堆排序,包括了每个排序的比较次数和交换次数
含有折半插入、交换冒泡、堆排序、直接插入、归并排序、快速排序、基数排序、简单选择、希尔排序等的算法实现
排序是计算机程序设计中的一种重要操作。它的功能是将一个数据元素(或记录)的任意序列,重新排列...算法主要包括:插入排序、折半插入排序、选择排序、冒泡排序、希尔排序、快速排序、堆排序、归并排序、基数排序等。
主要介绍了C++如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下
随机产生n个1~99的正整数序列,分别采用直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序对其进行递增排序
各种常用的排序算法,c++泛型实现,对于学习排序算法以及c++泛型编程都是很好的材料
八大排序java实现版本,直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔插入排序、快速排序 、堆排序、2-路归并排序 、基数排序,并有时间比较,博文...
插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。 * 关于排序方法的选择: * (1)...
对本章的各种排序方法(直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序和归并排序)的时间性能进行比较。 2、 基本要求 (1)设计并实现上述各种排序算法; (2)对正序和逆序的初始...
堆排序;归并排序;基数排序。 (2)待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字移动次数(关键字交换计为3次...
- 算法的种类:插入排序(直接插入排序,希尔排序,折半插入排序),选择排序(直接选择排序,堆排序(升序/最大堆)),交换排序(冒泡排序,快速排序),归并排序,分配排序(基数排序) - 算法的时间复杂度 - 算法的空间...
直接插入排序,折半插入排序,希尔排序,快速排序,冒泡排序,直接选择排序,堆排序,归并排序大合集
包含的九种内部排序有:直接插入排序、折半排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、链式基数排序(有简单介绍各个排序方法的时间复杂度)。 每一种排序算法,基本以 “小标题-算法...
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!
各种内部排序比较,冒泡 折半 直接插入 折半插入 希尔排序 简单选择排序 堆排序 归并排序,包括比较次数和移动次数
插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。 * * 关于排序方法的选择: * (1)若n...
插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择排序(直接选择排序、堆排序); * 4.归并排序; * 5.基数排序。 * * 关于排序方法的选择: * (1)若n...