vicky2021

快速排序的平均时间性能很好,与插入排序不同,快速排序根据整个文件,把控制当前排序进程的基准关键字放到正确的位置上。

时间复杂度:平均情况下,O(NlogN);最坏情况:O(N2)

空间复杂度:O(NlogN)

稳定性:不稳定

// 快速排序
// left = 0; 
// right = listSize - 1;
void quicksort(int list[], int left, int right) {
    int pivot;
    int i, j;
    int temp = 0;
    if (left < right) {
        i = left;
        j = right + 1;
        pivot = list[left];

        //完成一次排序,即将数组中小于pivot的关键字放在左边,大于pivot的关键字放在右边
        do {
            do
                i++;
            while (list[i] < pivot);
            do
                j--;
            while (list[j] > pivot);
            if (i < j) {
                temp = list[i];
                list[i] = list[j];
                list[j] = temp;
                //SWAP(list[i], list[j]); //list[i]和list[j]互换
            }
        } while (i < j);

        temp = list[left];
        list[left] = list[j];
        list[j] = temp;
        //SWAP(list[left], list[j]);
        quicksort(list, left, j - 1);
        quicksort(list, j + 1, right);
    }
}

 

分类:

技术点:

相关文章: