<p>/*终于到快排了,好慢好慢。。。</p><p>先说思想,其实是冒泡排序的优化,首先随机选取一个数作为基准,一般是第一个数。</p><p>然后遍历一遍,把比这个数小的放在他左边,把比这个数大的放在右边。 他在中间。</p><p>然后递归的调用这个函数,左右两边都递归本函数调用,即可。</p>SQ 2014 - 08 -13
*/
#include<stdio.h>
void quick_sort1(int *, int ,int);
int AdjustArray(int *,int ,int);
int main (){
int s[10] = {0,2,4,6,8,9,7,5,3,1};
int i= 0;
while ( i < ( sizeof(s)/(sizeof(s[0])) ) ) {
printf ("%d", s[i]);
i ++ ;
}
quick_sort1(s,0,9);
printf("ok!\n");
i = 0;
while ( i < sizeof(s) / ( sizeof(s[0]) ) ) {
printf ("%d", s[i]);
i ++ ;
}
return 0;
}
void quick_sort1(int s[], int l, int r)
{
int i;
if (l < r)
{
i = AdjustArray(s, l, r);
quick_sort1(s, l, i - 1);
quick_sort1(s, i + 1, r);
}
}
int AdjustArray(int s[], int l ,int r){
int i ,j;
int x;
x = s[l];
i = l;
j = r;
while( i < j){
while ( ( x <= s[j] )&& (i < j ))
j -- ;
if ( (x > s[j]) && (i < j) ) {
s[i] = s[j];
i ++ ;
}
while ( (x > s[i]) && (i < j) )
i ++ ;
if( (x < s[i]) && (i < j)){
s[j] = s[i];
j --;
}
}
s[i] = x;
return i;
}