快速排序法一(C)

来源:互联网 发布:淘宝模板装修市场 编辑:程序博客网 时间:2024/06/07 13:43

快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。

解法 这边所介绍的快速演算如下:将最左边的数设定为轴,并记录其值为 s
廻圈处理:
令索引 i 从数列左方往右方找,直到找到大于 s 的数
令索引 j 从数列左右方往左方找,直到找到小于 s 的数
如果 i >= j,则离开回圈
如果 i < j,则交换索引i与j两处的值
将左侧的轴与 j 进行交换
对轴左边进行递回
对轴右边进行递回
如下图:
这里写图片描述

C代码:

#include<stdio.h>#include<stdlib.h>#include<stdio.h>#define MAX 10#define swap(x,y) {int t;t=x;x=y;y=t;}void quick_sort(int number[], int left, int right){    int i, j;    //int num = number[left]; //定义基准数    if (left < right)    {        i = left;        j = right + 1;        while (1)        {            while (i <= MAX&&number[++i] < number[left]); //从左至右查找比基准数大的数                                                          //printf("%d\n", i);            while (j >= left&&number[--j] > number[left]);//从右至左查找比基准数小的数                                                          //printf("%d\n", j);            if (i < j)            {                swap(number[i], number[j]);            }            if (i > j)            {                swap(number[j], number[left]);                break;            }        }        quick_sort(number, left, j - 1);//左半部分递归        quick_sort(number, j + 1, right); //右半部分递归    }}int main(){    int num[10] = { 41 ,24 ,76 , 11 ,45 ,64 ,21 ,69 ,19 ,36 };    quick_sort(num, 0, 9);    for (int i = 0; i < 10; i++)        printf("%d ", num[i]);    system("pause");    return 0;}
原创粉丝点击