简单排序中包括了:冒泡排序、选择排序、插入排序;
1.冒泡排序的思想:
假设有 N 个数据需要排序,则从第 0 个数开始,依次比较第 0 和第 1 个数据, 如果第 0 个大于第 1 个则两者交换,否则什么动作都不做,继续比较第 1 个第 2 个…,这样依次类推,直至所有数据都“冒泡”到数据顶上。
冒泡排序的的 java 代码:
Public void bubbleSort(){
int in,out;
for(out=nElems‐1;out>0;out‐‐)
for(in=0;in<out;in++){
If(a[in]>a[in+1])
Swap(in,in+1);
}
}
算法的不变性:许多算法中,有些条件在算法执行过程中始终是不变的。这些 条件被称 为算法的不变性,如果不变性不为真了,则标记出错了; 冒泡排序的效率 O(N*N),比较 N*N/2,交换 N*N/4;
2. 选择排序的思想:
假设有 N 条数据,则暂且标记第 0 个数据为 MIN(最小),使用 OUT 标记最左 边未排序的数据,然后使用 IN 标记第 1 个数据,依次与 MIN 进行比较,如果比 MIN 小,则将该数据标记为 MIN,当第一轮比较完后,最终的 MIN 与 OUT 标记 数据交换,依次类推;
选择排序的 java 代码:
Public void selectSort(){
Int in,out,min;
For(out=0;out<nElems‐1;out++){
Min=out;
For(in=out+1;in<nElems;in++)
If(a[in]<a[min])
Min=in;
Swap(out,min);
}
}
选择排序的效率:O(N*N),比较 N*N/2,交换<N;选择排序与冒泡排序比 较,比较次数没有明显改变,但交换次数明显减少了很多;
3. 插入排序的思想:
插入排序是在部分数据有序的情况下,使用 OUT 标记第一个无序的数据,将 其提取保存到一个中间变量 temp 中去,使用 IN 标记空位置,依次比较 temp 中 的值与 IN‐1 的值,如果 IN‐值大于 temp 的值,则后移,直到遇到第一个比 temp 小的值,在其下一个位置插入;
插入排序的 java 代码:
Public void InsertionSort() {
Int in,out;
For(out=1;out<nElems;out++) {
Long temp=a[out]
In=out;
While(in>0&& a[in‐1]>temp)
{
A[in]=a[in‐1];
‐‐in;
}
A[in]=temp;
}
}
插入排序的效率:O(N*N), 比较 N*N/4,复制 N*N/4;插入排序在随机数的 情况下,比冒泡快一倍,比选择稍快;在基本有序的数组中,插入排序几乎只需 要 O(N);在逆序情况下,并不比冒泡快;