核心:比较相邻两个元素的大小,并根据要求交换这两个元素的位置。
代码:
public class Quick {
/**
*
* @param arr
* @param low
* @param high
* @return
*/
public static int partition(int[] arr, int low, int high){
//选择基准点
int key = arr[low];
//若两个指针相遇,则数组达到有序状态
while(low < high){
while(arr[high] > key && high > low){
high--;
}
arr[low] = arr[high];
while(arr[low] < key && high > low ){
low ++;
}
arr[high] = arr[low];
}
arr[high] = key;
return high;
}
public static void quickSort(int[] arr, int low, int high){
if(low > high)
return;
int index = partition(arr, low, high);
quickSort(arr, low, index - 1 );
quickSort(arr, index + 1, high);
}
public static void main(String[] args){
int[] arr = {11, 2, 9, 4, 7,15};
quickSort(arr, 0, 5);
for(int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
}
}
冒泡排序算法的时间复杂度为:O(n2)
空间复杂度为:O(1)