快速排序法

快速排序是冒泡排序的一种改进,主要的算法思想是在待排序的n个数据中取第一个数据作为基准值,将所有记录分为3组,使第一组中各数据值均小于或等于基准值,第二组做基准值的数据,第三组中各数据值均大于或等于基准值。这便实现了第一趟分割,然后再对第一组和第三组分别重复上述方法,依次类推,直到每组中只有一个记录为止。

 

#include

void qusort(int s[], int start, int end)
{
    int i, j;                                       //定义变量为基本整型 /
    i = start;                                     //将每组首个元素赋给i/
    j = end;                                       //将每组末尾元素赋给j/
    int temp = s[start];                               //设置基准值 /
    while (i < j)
    {
        while (i < j && temp < s[j])
            j--;                                  //位置左移 /
        if (i < j)
        {
            s[i] = s[j];                           //将s[j]放到s[i]的位置上 /
            i++;                                  //位置右移 /
        }
        while (i < j && s[i] <= temp)
            i++;                                  //位置左移 /
        if (i < j)
        {
            s[j] = s[i];                           //将大于基准值的s[j]放到s[i]位置 /
            j--;                                  //位置左移 /
        }
    }
    s[i] = temp;                                   //将基准值放入指定位置 /
    if (start < i)
        qusort(s, start, j - 1);                   //对分割出的部分递归调用qusort()函数 /
    if (i < end)
        qusort(s, j + 1, end);
}
int main(int argc, char** argv) {
    int arr[] = { 10, 7,22,15,60,51,100,85, 8, 9, 1, 5 };
    int n = sizeof(arr) / sizeof(arr[0]);

    qusort(arr, 0, n - 1);

    printf("排序后的数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
  
}

你可能感兴趣的:(c语言)