【C/C+】快速並べ替えの2つの考え
8265 ワード
方法の1:絶えず穴を埋めて、一回で1つの値を確定します。http://blog.csdn.net/morewindows/article/details/6684558
方法二:一回に二つの値を見つけて交換します。 http://developer.51cto.com/art/201403/430986.htm
#include<stdio.h>
void qsort(int *array, int len)
{
int value, start, end;
if (len <= 1)
return;
value = array[0];
start = 0;
end = len - 1;
while (start < end) {
for (; start < end; --end) {
if (array[end] < value) {
array[start++]=array[end];
break;
}
}
for (; start < end; ++start) {
if (array[start] > value)
{
array[end--]=array[start];
break;
}
}
}
array[start]=value;
qsort(array, start );
qsort(array+start+1 , len-start-1 );
}
int main()
{
int a[10]={9,8,7,3,4,5,6,1,2,0};
qsort(a,10);
int i;
for(i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
}
方法二:一回に二つの値を見つけて交換します。 http://developer.51cto.com/art/201403/430986.htm
#include <stdio.h>
int a[101],n;// ,
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return;
temp=a[left]; //temp
i=left;
j=right;
while(i!=j)
{
// ,
while(a[j]>=temp && i<j)
j--;
//
while(a[i]<=temp && i<j)
i++;
//
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1);// ,
quicksort(i+1,right);// ,
}
int main()
{
int i,j,t;
//
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(1,n); //
//
for(i=1;i<=n;i++)
printf("%d ",a[i]);
getchar();getchar();
return 0;
}