for循环实现的升序降序
1 冒泡排序
for(h=1;h<n;h++)
{
for(i=0;i<n-h;i++)
{
if(a[i]>a[i+1])//换成小于号则是升序
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
2 快速排序
#include<stdio.h>
void qsort(int a[],int l,int h);
int main()
{
int a[1000];
int n,i;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,1,n);
for(i=1;i<n;i++)
{
printf("%d ",a[i]);
}printf("%d\n",a[n]);
}
return 0;
}
void qsort(int a[],int l,int h)
{
int i=l,j=h,key=a[l];
if(i>=j)return ;//此处比写,否则函数会无限循环调用
while(i<j)
{
while(i<j&&a[j]>=key)j--;
a[i]=a[j];
while(i<j&&a[i]<=key)i++;
a[j]=a[i];
}
a[i]=key;
qsort(a,l,i-1);
qsort(a,i+1,h);
}
快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候
设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全
部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进
行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。当
然在坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的差时间复杂度和 冒泡排序是一样的,都是 O(N2),
3 选择排序
for(i=1;i<=n;i++)
{
k=i;
for(j=i+1;j<=n;j++)
{
if(g[k]>g[j])
k=j;
}
if(k!=i)
{
t=g[i];
g[i]=g[k];
g[k]=t;
}
}