标签:
快速排序法是一种非常高效的排序算法,它采用“分而治之”的思想,把大的拆成小的,小的才拆分成更小的。
基本原理:
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