均為C語言實現(xiàn) 操作對象均為一維int型數(shù)組
-
逆序
int array[5]={1,2,3,4,5};
int i;
int len=sizeof(array)/sizeof(array[0]);
for(i=0;i<len/2;i++)
{
int tmp=array[i];
array[i]=array[len-i-1];
array[len-i-1]=array[i];
}
-
選擇排序
int array[5]={3,4,1,5,2};
int i,j;
int len=sizeof(array)/sizeof(array[0]);
for (i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
{
if (array[i]>array[j])
{
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
-
冒泡排序
int array[5]={3,4,1,5,2};
int i,j;
int len=sizeof(array)/sizeof(array[0]);
for (i=0;i<len-1;i++)
for (j=0;j<len-1-i;j++)
{
if (array[j]>array[j+1])
{
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
另一種寫法
int array[5]={3,4,1,5,2};
int i,j;
int len=sizeof(array)/sizeof(array[0]);
for (i=len-1;i>0;i--)
for(j=0;j<i;j++)
{
if (array[j]>array[j+1])
{
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
-
插入排序
int array[5]={3,4,1,5,2};
int i,j;
int len=sizeof(array)/sizeof(array[0]);
int b[len]; //禁止使用類似" b[len]={a[0]}"來初始化
b[0]=a[0];
for(i=1;i<len;i++)
{
int tmp=a[i];
j=i;
while(j>0&&b[j-1]>tmp)
{
b[j]=b[j-1];
j--;
} //找出合適位置
b[j]=tmp;
}
for(i=0;i<len;i++) //放回去
{
a[i]=b[i];
}
-
原地插入排序
int array[5]={3,4,1,5,2};
int i,j;
int len=sizeof(array)/sizeof(array[0]);
int j;
for(i=1;i<len;i++)
{
int tmp=a[i];
j=i;
while(j>0&&a[j-1]>tmp)
{
a[j]=a[j-1];
j--;
} //找出合適位置
a[j]=tmp;
}
-
二分法
int begin,time,end,mid;
while(1)
{
printf("\ninput:\n");
scanf("%d",&n);
begin=0,time=0;
end=sizeof(a)/sizeof(a[0])-1;
while(begin<=end)
{
time++;
mid=(begin+end)/2;
if(a[mid]>n)
{
end=mid-1;
}
else if(a[mid]<n)
{
begin=mid+1;
}
else
{
break;
}
}
if(begin<=end)
printf("Looking for %d times to find \'%d\', located in the %d",time,n,mid);
else
printf("Not Found\n");