码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序法

时间:2015-07-09 00:26:52      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

快速排序法是一种非常高效的排序算法,它采用“分而治之”的思想,把大的拆成小的,小的才拆分成更小的。

基本原理:

        1.给定N个数字。通过一趟排序后将原序分为两个部分,其中前半部分的数字比后半部分的数字小。

        2.然后再依次对前后两部分的记录进行快速排序。

        3.不断递归排序,直到所有的数字都为有序数字。

分析:

       1.快速排序的第一步就是确认一个基准,一般是第一个或者最后一个数字为基准。

       2.然后依据这个基准,进行比较.左边下标为low,右边下标为high,依次进行比较。

       3.我们这里就确认为最左边的数字为基准。即index=a[i];

       4.然后从左线向右开始比较,即最左边的数字是否小于基准,a[i]<index,若是,则i++;进行下一位的比较,若不是,则将a[i]赋值给a[j],同时j--;即将a[i]的赋值给右边的值。

       5.接着比较最右边的值,a[j]>index,若是,则j--;进行下一位的比较,若不是,则将a[j]的值赋值给a[i];同时i++.

       6.当两边比较完了,将index赋值给a[i],因为这时的a[i]是中间值。

       7.最后两边进行递归。

      关键函数:

      {while(i<j)

                       {

                                 while(i<j&&a[j]>index)

                                       j--;

                                   if(i<j)

                                     a[i++]=a[j];

                                 while(i<j&&a[i]<index)

                                       i++;

                                   if(i<j)

                                      a[j--]=a[i];

                      }

                     array[i]=index;

                     sort(a,low,i-1);

                     sort(a,i+1,high);

        }

 

完整函数:

#include<stdio.h>

void Sort(int a[],int low,int high)
  {
    int i,j;
    int index;
    if(low>=high)//不能忘记这个条件,不然程序跳不出循环
    {
      return;
    }
    i = low;
    j = high;
    index = a[i];
    while(i<j)
    {
      while(i<j&&a[j]>index)
      j--;
      if(i<j)
      a[i++]=a[j];
      while(i<j&&a[i]<index)
      i++;
      if(i<j)
      a[j--]=a[i];
    }
    a[i]=index;
    Sort(a,low,i-1);
    Sort(a,i+1,high);
}

void QuickSort(int a[],int len)
{
    Sort(a,0,len-1);
}
int main()
{
  int a[]={1,4,6,2,8,3};
  int len = sizeof(a)/sizeof(a[0]);
  QuickSort(a,len);
  for(int i=0;i<len;i++)
    printf("%d",a[i]);
  return 0;
}

快速排序法

标签:

原文地址:http://www.cnblogs.com/kaining/p/4631507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!