算法-排序
1.定义:将一组对象按照某种逻辑顺序重新排列的过程
2.初级排序算法
1>主要关注对象:重新排列数组元素的算法,其中每个元素有一个主键
2>框架,验证,运行时间,基本操作次数,额外的内存使用,数据类型
框架
class Example{
public static boolean less(Comparable a,Comparable b){
return a.compareTo(b)<0;
}
public static void exchange(Comparable[] a,int i,int j){
Comparable tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
public static void show(Comparable[] a){
for(int i=0;i<a.length;i++)
print(a+" ");
println();
}
public static boolean isSorted(Comparable[] a){
for(int i=0;i<a.length-1;i++)
if(less(a[i+1],a[i]))
return false;
return true;
}
public static void sort(Comparable[] a){
//将数组做升序排列
}
}
}
3>选择排序
首先,招到数组中最小元素,其次,将它与第一个元素交换位置。再次,在剩余的元素找最小元素,将它与数组中第二个元素交换,
如此往复,直到整个数组有序
class Selection{
public static boolean less(Comparable a,Comparable b){
return a.compareTo(b)<0;
}
public static void exchange(Comparable[] a,int i,int j){
Comparable tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
public static void show(Comparable[] a){
for(int i=0;i<a.length;i++)
print(a+" ");
println();
}
public static boolean isSorted(Comparable[] a){
for(int i=0;i<a.length-1;i++)
if(less(a[i+1],a[i]))
return false;
return true;
}
public static void sort(Comparable[] a){
//将数组做升序排列
final int N=a.length;
for(int i=0;i<N;i++){
int min=i;
for(int j=i+1;j<N;j++){
if(less(a[j],a[min]))
min=j;
}
exchange(a,i,min);
System.out.printf("[loop:%d]:%s\n",i,Arrays.toString(a));
}
}
}
4>插入排序
class Insertion{
public static boolean less(Comparable a,Comparable b){
return a.compareTo(b)<0;
}
public static boolean isSorted(Comparable[] a){
final int N=a.length-1;
for(int i=0;i<N;i++){
if(less(a[i+1],a[i]))
return false;
}
return true;
}
public static void show(Comparable[] a){
final int N=a.length;
for(int i=0;i<N;i++)
print(a[i]+" ");
println();
}
public static void exchange(Comparable[] a,int i,int j){
Comparable tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
public static void sort(Comparable[] a){
//将数组做升序排列
final int N=a.length;
for(int i=1;i<N;i++) {
Comparable tmp=a[i];
int j=i-1;
for(;j>=0&&less(tmp,a[j]);j--)
a[j+1]=a[j];
a[j+1]=tmp;
}
}
}