二.简单排序
1.简单排序介绍了三种排序方法,分别是冒泡排序(时间复杂度为O(N*N))、选择排序(时间复杂度为O(N*N))、插入排序(时间复杂度为O(N*N))。这三种排序中冒泡排序最为简单,但是它的应用比较少因为太简单,效率低,数据的交换次数比较多;其次是选择排序,与冒泡排序比较它的交换次数少了许多,但是效率也是比较低;用的相对比较多的是插入排序,尤其是数据量较大的时候,它的优势就更为明显;
2.分析冒泡排序:
public void bubbleSort() {
int out, in;
for (out = items - 1; out > 1; out--) {
for (in = 0; in < out; in++) {
if (array[in] > array[in + 1]) {
swap(in, in + 1);
}
}
}
}
冒泡排序的思想是外层循环将所有的数据进行迭代,并且迭代一次后总数减一,然后进行内层的循环;在内层的循环中循环的次数是外层记录的次数,在内层的循环中将最大的数据排在最后,这样就呈现出大的数据下沉,小的数据上浮的效果;
3.分析选择排序
public void selectSort() {
int in,out,min;
for(out = 0;out < items-1;out++){
min = out;
for(in = out+1;in < items;in++){
if(array[in] < array[min]){
min= in;
}
}
swap(out,min);
}
}
选择排序的外层循环将所有的数据进行迭代,同时每一次访问都将数据的下标标记为最小值的下标,在内层循环中找出从当前的外层循环记录的数据至最后一个数据中最小的数据的下标,然后在外层循环中将最小的数据与当前的值进行交换。从该过程中我们不难看出选择排序大大降低了数据交换的次数。
4.分析插入排序
public void insertSort() {
int in, out;
for (out = 0; out < items; out++) {
long temp = array[out];
in = out;
while (in > 0 && array[in - 1] >= temp) {// 如果当前的值小于移动到的位置的值继续向前移动
array[in] = array[in - 1];// 向前移动
in--;
}
array[in] = temp;// 将当前的值添加到相应的位置中
}
}
插入排序也是两层循环,外层循环也是遍历所有的数据,在循环中利用一个变量暂存当前的数据,同时在内层循环中从外层循环的数据的位置向前进行查找直到找到比当前数据小的数据时将当前的数据插入到该位置。在查找的过程中同时数据依次往后移动。注意插入排序中数据具有局部有序性。