#include stdio.h
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、赤峰ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的赤峰網(wǎng)站制作公司
#includestdlib.h
#includestring.h
int comp(char *a,char *b)
{
while(*a==*b*a*b){a++;b++;}
return (int)*a-(int)*b;
}
int main(void)
{
char s[1000][20];
int i,n;
scanf("%d\n",n);
for(i=0;in;i++)
gets(s[i]);
qsort(s,n,sizeof(s[0]),comp);
printf("\n");
for(i=0;in;i++)
puts(s[i]);
system("pause");
return 0;
}
#include stdio.h
int partions(int l[],int low,int high)
{
int prvotkey=l[low];
l[0]=l[low];
while (lowhigh)
{
while (lowhighl[high]=prvotkey)
--high;
l[low]=l[high];
while (lowhighl[low]=prvotkey)
++low;
l[high]=l[low];
}
l[low]=l[0];
return low;
}
void qsort(int l[],int low,int high)
{
int prvotloc;
if(lowhigh)
{
prvotloc=partions(l,low,high); //將第一次排序的結(jié)果作為樞軸
qsort(l,low,prvotloc-1); //遞歸調(diào)用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high); //遞歸調(diào)用排序 由 prvotloc+1到 high
}
}
void quicksort(int l[],int n)
{
qsort(l,1,n); //第一個(gè)作為樞軸 ,從第一個(gè)排到第n個(gè)
}
void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39};
for (int b=1;b11;b++)
printf("%3d",a[b]);
printf("\n");
quicksort(a,11);
for(int c=1;c11;c++)
printf("%3d",a[c]);
}
#include?stdio.h
#include?malloc.h
void?change(int?*a,int*b)
{
int?t=*a;
*a=*b;
*b=t;
}
void?qsort(int*a,int?n)
{
if(n1){
int?i=0,j=n-1,t=0;
for(;ij;)
{
while(a[t]=a[j])j--;
if(j0)break;
change(a+t,a+j);
t=j;
while(a[t]=a[i])i++;
if(i=n)break;
change(a+t,a+i);
t=i;
}
qsort(a,i-1);
qsort(a+i+1,n-i-1);
}
}
int?main(void)
{
int?*a;
int?t,n,i;
scanf("%d",t);
while(t--)
{
scanf("%d",n);
a=(int*)malloc(n*sizeof(int));
for(i=0;in;i++)
scanf("%d",a+i);
qsort(a,n);
for(i=0;in;i++)
printf("%d?",a[i]);
free(a);
}
return?0;
}
給個(gè)快速排序你參考參考
/**********************?快速排序?****************************
基本思想:在待排序的n個(gè)記錄中任取一個(gè)記錄(通常取第一個(gè)記錄),
??以該記錄為基準(zhǔn),將當(dāng)前的無(wú)序區(qū)劃分為左右兩個(gè)較小的無(wú)
??序子區(qū),使左邊的記錄均小于基準(zhǔn)值,右邊的記錄均大于或
??等于基準(zhǔn)值,基準(zhǔn)值位于兩個(gè)無(wú)序區(qū)的中間位置(即該記錄
??最終的排序位置)。之后,分別對(duì)兩個(gè)無(wú)序區(qū)進(jìn)行上述的劃
??分過(guò)程,直到無(wú)序區(qū)所有記錄都排序完畢。
*************************************************************/
/*************************************************************
函數(shù)名稱:static?void?swap(int?*a,?int?*b)
參????數(shù):int?*a---整型指針
??int?*b---整型指針
功????能:交換兩個(gè)整數(shù)的位置
返?回?值:無(wú)
說(shuō)????明:static關(guān)鍵字指明了該函數(shù)只能在本文件中使用
**************************************************************/
static?void?swap(int?*a,?int?*b)
{??
int?temp?=?*a;
*a?=?*b;
*b?=?temp;
}
int?quickSortNum?=?0;?//?快速排序算法所需的趟數(shù)
/*************************************************************
函數(shù)名稱:static?int?partition(int?a[],?int?low,?int?high)
參????數(shù):int?a[]---待排序的數(shù)據(jù)
??int?low---無(wú)序區(qū)的下限值
??int?high---無(wú)序區(qū)的上限值
功????能:完成一趟快速排序
返?回?值:基準(zhǔn)值的最終排序位置
說(shuō)????明:static關(guān)鍵字指明了該函數(shù)只能在本文件中使用
**************************************************************/
static?int?partition(int?a[],?int?low,?int?high)
{
int?privotKey?=?a[low];??//基準(zhǔn)元素
while(low??high)
{???//從表的兩端交替地向中間掃描??
while(low??high???a[high]?=?privotKey)???//?找到第一個(gè)小于privotKey的值
high--;??//從high所指位置向前搜索,至多到low+1位置??
swap(a[low],?a[high]);??//?將比基準(zhǔn)元素小的交換到低端
while(low??high???a[low]?=?privotKey)???//?找到第一個(gè)大于privotKey的值
low++;??//從low所指位置向后搜索,至多到high-1位置
swap(a[low],?a[high]);??//?將比基準(zhǔn)元素大的交換到高端
}
quickSortNum++;??//?快速排序趟數(shù)加1
return?low;??//?返回基準(zhǔn)值所在的位置
}??
/*************************************************************
函數(shù)名稱:void?QuickSort(int?a[],?int?low,?int?high)
參????數(shù):int?a[]---待排序的數(shù)據(jù)
??int?low---無(wú)序區(qū)的下限值
??int?high---無(wú)序區(qū)的上限值
功????能:完成快速排序算法,并將排序完成的數(shù)據(jù)存放在數(shù)組a中
返?回?值:無(wú)
說(shuō)????明:使用遞歸方式完成
**************************************************************/
void?QuickSort(int?a[],?int?low,?int?high)
{??
if(low??high)
{
int?privotLoc?=?partition(a,?low,?high);?//?將表一分為二??
QuickSort(a,?low,?privotLoc-1);??????????//?遞歸對(duì)低子表遞歸排序??
QuickSort(a,?privotLoc+1,?high);?????????//?遞歸對(duì)高子表遞歸排序??
}
}