对数据进行排序可以方便我们检索数据,例如二分查找法比线性查找法通常要快,然而二分查找只能用于有序的数据。
这里仅仅列出三种简单排序方法的Java实现:冒泡排序,选择排序,插入排序。较为复杂的排序方法如希尔排序,快速排序,归并排序暂不描述。
冒泡排序:
public void BubbleSort(){ int out, in; for (out = n - 1; out > 1; out--) //外部循环 for (in = 0; in < out; in++) //内部循环 if(a[in] > a[in + 1]){ //交换位置 int temp = a[in]; a[in] = a[in + 1]; a[in + 1] = temp; } }
选择排序:
public void SelectionSort(){ int out, in, min; for (out = 0; out < n - 1; out++){ //外部循环 min = out; //选择初始值作为最小 for (in = out + 1; in < n; in++) //内部循环 if (a[in] < a[min]) //一次循环选出最小值的Index min = in; int temp = a[out]; //交换初始值和最小值 a[out] = a[min]; a[min] = temp; } }
插入排序:
public void InsertionSort(){ int in, out; for (out = 1; out < n; out++){ //out is dividing line int temp = a[out]; //remove marked item in = out; //start shifts at out while (in > 0 && a[in -1] >= temp){ //until one is smaller a[in] = a[in - 1]; //shift item right in--; //go left one positin } a[in] = temp; //insert marked item } }
以上三种排序方法的时间复杂度都为O(N2)
冒泡排序:交换和比较操作都和N2成正比;
选择排序:将必要的交换次数降为O(N),然而比较次数仍为O(N2);
插入排序:复制的次数大致等于比较的次数,对于随机数据,插入排序比冒泡排序快一倍,比选择排序略快。对于已经有序或者基本有序的数据来说,插入排序要好很多。当数据有序的时候,while循环的条件总是false,所以就变成了外层循环中的一个简单的语句,执行N-1次
原文:http://www.cnblogs.com/lahwf/p/6380316.html