锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
# include<stdlib.h>
# include<iostream>
# define DEBUG 1
const int N = 100;
/* 閫傚悎杈撳叆鑼冨洿姣旇緝灝忕殑 紜垏鐨勮搴旇鏄皬浜?0涓囩殑鏁版嵁閲?nbsp; 鎵嶉傜敤 */
int count_qsort(int input_array[],int n)
{
// int result_array[n] ; 榪欐牱鍒嗛厤涓嶅
int *result_array,*temp_array;
//int result_array[N] = {0},temp_array[N] = {0};
result_array = (int *)malloc(sizeof(int)*n);
temp_array = (int *)malloc(sizeof(int)*N);
int i,j;
memset(result_array,0,sizeof(result_array)*n);//memset(result_array,0,sizeof(result_array)) 寰堜範鎯殑ACM鐨勫啓娉?nbsp;浣嗘槸鍥犱負
//ACN緇忓父鏄紑闈欐?nbsp;鎴栬呭叏灞鏁扮粍 sizeof 鍙互寰楀埌鍏ㄩ儴鐨勫ぇ灝?nbsp;浣嗘槸 榪欓噷result 鏄寚閽堢殑璇?nbsp;灝變笉涓鏍蜂簡 寰楀埌鐨勫彧鏄竴涓寚閽堢殑澶у皬
// 鍗沖洓涓瓧鑺?nbsp;寰堜箙娌℃湁鍐欎唬鐮?nbsp;涓鍐欏氨鍑洪敊 TMD
memset(temp_array,0,sizeof(temp_array)*N);
for(i = 0 ; i < n; i ++)
{
j = input_array[i];
temp_array[j] ++;
}
for(i = 1; i < N; i ++)/*寰楀埌 鏌愪竴鍊肩殑鏈澶т綅緗?/span>*/
temp_array[i] += temp_array[i-1];
for(i = n-1; i >= 0 ; i -- )
{
if(temp_array[input_array[i]])
{
result_array[ temp_array[ input_array[i]] -1] = input_array[i];
temp_array[input_array[i]] --;
}
}
for(i = 0 ; i < n; i ++)
input_array[i] = result_array[i];
return 0;
}
int main()
{
int data[N];
int num,i;
#ifdef DEBUG
scanf("%d",&num);
for(i = 0; i < num; i ++)
scanf("%d",&data[i]);
count_qsort(data,num);
for(i = 0 ; i < num ;i ++)
printf("%d ",data[i]);
#endif
return 0;
}
]]>
void swap(int *a,int *b)//娉ㄦ剰瑕佷紶鍦板潃
{
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int data[],int start,int end )//鏈鍚庢槸 i鍒?nbsp;j-1 鐨勯兘鏄皬浜?nbsp;data[end]
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = start,i = start;i < end; i ++)
{
if(data[i]<data[end])
{
swap(&data[i],&data[j]);
j++;
}
}
swap(&data[end],&data[j]);
}
return j;
}
int partition1(int data[],int start,int end )//鏈鍚庢槸 i鍒?nbsp;j-1 鐨勯兘鏄皬浜?nbsp;data[end]
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = start+1,i = start+1;i <= end; i ++)
{
if(data[i]<data[start])
{
swap(&data[i],&data[j]);
j++;
}
}
swap(&data[start],&data[j]);
}
return j;
}
void quicksort(int data[],int start,int end)
{
int mid = 0;
if(start< end)
{
mid = partition1(data,start,end);
quicksort(data,start,mid-1);
quicksort(data,mid+1,end);
}
}
void printf(int data[])
{
int len = 10,i ;
for(i = 0;i < len ; i ++)
printf("%d ",data[i]);
}
int main()
{
int data[10] = {10,-232,43422,5,632,72,3,55,12,132};
quicksort(data,0,9);
printf(data);
return 0;
}
]]>