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);
}