快速排序

思路分析:

1、先从数组里面拿出一个数据(sample),从数组最右边下标(end)开始比较,直到遇到比sample小的数(min)就把min放到sample的位置上

2、接着从数组最左边下标(begin)开始比较,直到遇到比sample大的数(max),就把max放到前面min的原来的位置上

3、一直重复步骤1和2,直到begin下标和end下标相等

4、接着递归分别排序左右两边的数

 

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void quick_sort(int *array,int begin,int end)
{
    if(begin < end)
    {
      int i=begin,j=end,x;
      x = array[begin];
      while(i < j)
       {
         while( i < j && x <= array[j])
         j--;
         if(i < j)
         array[i++] = array[j];
         while(i < j && x > array[i])
         i++;
         if(i < j)
         array[j++] = array[i];
      }
      array[i] = x; 
      quick_sort(array,begin,i-1);
      quick_sort(array,i+1,end);
    }
}


int main(int argc,char **argv)
{
    int i = 0;
  int array[10] = {1,2,8,97,45,56,77,11,6,100};
    quick_sort(array,0,9);
    printf("hello\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",array[i]);
    }
    return 0;
}

 

posted @ 2018-03-26 16:43  沙漠里的孤鲸  阅读(160)  评论(0编辑  收藏  举报