算法-学习笔记(一)
1 排序
1.1 插入排序
插入排序代码(Java):
public static void insertionSort(int[] array
){
for (int i
= 1; i
< array
.length
; i
++) {
int key
= array
[i
], j
=i
-1;
while(j
>= 0 && array
[j
] > key
){
array
[j
+1] = array
[j
];
j
--;
}
array
[j
+1]=key
;
}
}
测试代码(需导入junit包)
public static int[] produceArray(int num
){
Random random
= new Random();
int[] a
= new int[num
];
for (int i
= 0; i
< num
; i
++) {
a
[i
] = random
.nextInt(100);
}
return a
;
}
@Test
public void insertionSort(){
int []a
= Sort
.produceArray(10000);
System
.out
.println(Arrays
.toString(a
));
long beginTime
= System
.nanoTime();
com
.algorithm
.sort
.Sort
.insertionSort(a
);
long overTime
= System
.nanoTime();
System
.out
.println(Arrays
.toString(a
));
System
.out
.println("耗时:"+(overTime
-beginTime
)/1000000.0+"ms");
}
1.2 归并排序
归并排序递归实现
public static void mergeSort(int[] array
, int left
, int right
){
if(left
<right
){
int middle
= (left
+right
)/2;
mergeSort(array
,left
,middle
);
mergeSort(array
,middle
+1,right
);
merge(array
,left
,middle
,right
);
}
}
public static void merge(int[] array
,int left
, int middle
, int right
){
int n1
= middle
-left
+1;
int n2
= right
-middle
-1+1;
int[] arrayLeft
= new int[n1
+1];
int[] arrayRight
= new int[n2
+1];
for (int i
= 0; i
< n1
; i
++) {
arrayLeft
[i
] = array
[left
+i
];
}
for (int i
= 0; i
< n2
; i
++) {
arrayRight
[i
] = array
[middle
+i
+1];
}
arrayLeft
[n1
] = Integer
.MAX_VALUE
;
arrayRight
[n2
] = Integer
.MAX_VALUE
;
int pl
=0,pr
=0;
for (int i
= left
; i
<= right
; i
++) {
if(arrayLeft
[pl
] < arrayRight
[pr
]){
array
[i
] =arrayLeft
[pl
];
pl
++;
}else{
array
[i
] = arrayRight
[pr
];
pr
++;
}
}
}
测试代码(需junit包)
@Test
public void mergeSort(){
int size
= 100000;
int []a
= Sort
.produceArray(size
);
System
.out
.println(Arrays
.toString(a
));
long beginTime
= System
.nanoTime();
com
.algorithm
.sort
.Sort
.mergeSort(a
,0,size
-1);
long overTime
= System
.nanoTime();
System
.out
.println(Arrays
.toString(a
));
System
.out
.println("耗时:"+(overTime
-beginTime
)/1000000.0+"ms");
}
1.3 算法时间对比
插入排序与归并排序所用时间
数据量越大两者的效率差距越大
转载请注明原文地址:https://ipadbbs.8miu.com/read-15705.html