C语言冒泡排序
C语言冒泡排序
C语言冒泡排序:
定义:从第一个数开始,和其后面的第一个数比较,若大之,则交换,否则,和第三个数比较,直到第一个数和所有的数都比较完,完成第一趟排序,并选出了最大的一个数,排在了最后面,然后在将第一趟排序好的数组的第一个数和后面的数依次比较,不必和最后一个数比较了,因为最后一个数是最大数了。如此,第三趟排序不必和最后两个数比较了。当多有的数都比较过后,排序完成。
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a[]={4,5,2,6,9,7,5,74,56,89,132};
Bubble(a,11);
int i=0;
for(;i<11;i++)
{
printf("%d:%d\n",i,a[i]);
}
return 0;
}
void Bubble(int a[],int len)
{
int length=len;
int i=0;
int j=0;
for(;i<len;i++)
{
for(;j<length;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
length--;
j=0;
}
}
快速排序:
定义:将要排序的数组分成两块,其中一块的每一个数都小于另一块中的每一个数。
方法:1 取第一个数作为标准
2 从数组的最后面开始,将最后一个数和标准(第一个数)对比,大于标准,取倒数第二个数和标准对比,一次类推,若小于标准将标准和该数交换。
3 从前面第二个数开始,与标准比较,大于标准,交换,否则一直向下找。
4 当从后面的数和从前面的数相等的时候,第一趟排序完成。
5 利用递归,完成剩下的排序。
代码:
void quick(int a[],int orign,int length)
{
if(orign>=length)
{
return;
}
int temp=a[orign];
int lengthnum=length;
int i=orign;
while(i!=lengthnum)
{
while(a[i]<a[lengthnum]&&i<lengthnum)
{
lengthnum--;
}
if(i<lengthnum)
{
int temp=a[i];
a[i]=a[lengthnum];
a[lengthnum]=temp;
i++;
}
while(a[lengthnum]>a[i]&&i<lengthnum)
{
i++;
}
if(i<lengthnum)
{
int temp=a[i];
a[i]=a[lengthnum];
a[lengthnum]=temp;
lengthnum--;
}
}
quick(a,0,i-1);
quick(a,lengthnum+1,length);
}
评论暂时关闭