4.快速排序
快速排序采用分治法,指定一个数,比它大的放在它的右边,比它小的放在它的左边。
然后这左边和右边的这两个子数组再进行相同的操作,递归调用,直到整个数组排序完成。
时间复杂度为O(n)
- class QuickSort
- {
- public void quickSort(int[] arr, int i, int j)
- {
- int end = getEnd(arr, i, j);
- quickSort(arr, i, end - 1);
- quickSort(arr, end + 1 , j);
- }
- public int getEnd(int[] arr, int i, int j)
- {
- int temp = arr[i];
- while (i < j)
- {
- while (arr[j] > temp)
- {
- j--;
- }
- arr[i] = arr[j];
- while (arr[i] < temp)
- {
- i++;
- }
- arr[j] = arr[i];
- }
- arr[i] = temp;
- return i;
- }
- }
复制代码 |