简单选择排序
算法思想
从头到尾顺序扫描序列,找出最小的一个关键字,和第一个关键字交换,接着从剩下的关键字中继续这种选择和交换。
public static void simpleSelectSort(int arrray[]) {//最小数下标int minIndex = 0;int temp;for (int i = 0; i < arrray.length; i++) {minIndex = i;//找出未排序区中的最小值下标for (int j = i + 1; j < arrray.length; j++) {if (arrray[minIndex] > arrray[j])minIndex = j;}//最小值交换temp = arrray[i];arrray[i] = arrray[minIndex];arrray[minIndex] = temp;}}
复杂度分析
时间复杂度:O(n2)
空间复杂度:O(1)
堆排序
算法思想
堆是一种数据结构,可以把堆看成一颗完全二叉树,这可完全二叉树满足:任何一个非叶节点的值都不大于(或不小于)其左右孩子结点的值。若父亲大孩子小,则这样的堆叫做大顶堆;若父亲小孩子大,这样的堆叫做小顶堆。
public static void buildMaxHeap(int array[]){for (int i = array.length/2; i >= 0; i--){heapAdujust(array,i,array.length);}}public static void heapAdujust(int array[], int k, int len){int temp = array[k];for (int i = k*2; i < len; i *= 2){if ((array[i] < array[i+1]) && (i < len))i++;if (temp >= array[i])break;else{array[k] = array[i];k = i;}}array[k] = temp;}public static void swap(int array[], int index){int temp = array[0];array[0] = array[index];array[index] = temp;}public static void heapSort(int array[]){buildMaxHeap(array);for (int i = array.length-1; i >= 0; i--) {swap(array,i);heapAdujust(array,0,i-1);}}
