1、冒泡排序
#include <stdio.h>
int main()
{
int i,j;
int itemp;
int a[10] = {1,3,2,5,6,4,8,9,7,10};
//从小到大排序
for(i = 1; i<10; i++)
{
for(j=9; j>=i; j--)
{
if(a[j]<a[j-1])
{
//交换相临的两个元素的位置
itemp = a[j-1];
a[j-1] = a[j];
a[j] = itemp;
}
}
}
//输出数组
for(i=0; i<10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if((i+1) % 5 == 0)
printf ("\n");
}
}
2、选择排序
#include <stdio.h>
int main()
{
int i,j;
int itemp,pos;
int a[10] = {1,3,2,5,6,4,8,9,7,10};
//从小到大排序
for(i=0; i<9; i++)
{
itemp = a[i];
pos = i;
for(j=i+1; j<10; j++)
{
if(a[j]<itemp)
{
itemp = a[j];
pos = j;
}
}
//交换两个元素值
a[pos] = a[i];
a[i] = itemp;
}
//输出数组
for(i=0; i<10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if((i+1) % 5 == 0)
printf ("\n");
}
}
3、直接插入排序
#include <stdio.h>
int main()
{
int i;
int itemp,pos;
int a[10] = {1,3,2,5,6,4,8,9,7,10};
//从小到大排序
for(i=1; i<10; i++)
{
itemp = a[i];
pos = i-1;
while((pos>=0) && (itemp < a[pos]))
{
a[pos+1] = a[pos];
pos--;
}
a[pos+1] = itemp;
}
//输出数组
for(i=0; i<10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if((i+1) % 5 == 0)
printf ("\n");
}
}
5、交换排序
#include <stdio.h>
int main()
{
int i,j;
int itemp;
int a[10] = {1,3,2,5,6,4,8,9,7,10};
//从小到大排序
for(i=0; i<9; i++)
{
for(j=i+1; j<10; j++)
{
if(a[j] < a[i])
{
//交换两个数值
itemp = a[i];
a[i] = a[j];
a[j] = itemp;
}
}
}
//输出数组
for(i=0; i<10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if((i+1) % 5 == 0)
printf ("\n");
}
}
6、快速排序法(折半排序法)
#include <stdio.h>
void CelerityRun(int left, int right, int arr[])
{
int i,j;
int middle,itemp;
i = left;
j = right;
middle = arr[(left+right)/2];
do
{
while((arr[i]<middle) && (i<right)) //从左侧找小于中值的数
i++;
while((arr[j]>middle) && (j>left)) //从右侧找大于中值的数
j--;
if(i<=j) //找到一对值
{
itemp = arr[i];
arr[i] = arr[j];
arr[j] = itemp;
i++;
j--;
}
}while(i<=j); //如果两边的下标交错,就停止(完成一次)
if(left < j) //递归左半边
CelerityRun(left,j,arr);
if( right > i )
CelerityRun(i, right, arr);
}
int main()
{
int i;
int a[10] = {1,3,2,5,6,4,8,9,7,10};
//从小到大排序
CelerityRun(0,9,a);
//输出数组
for(i=0; i<10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if((i+1) % 5 == 0)
printf ("\n");
}
}
7、希尔排序
#include <stdio.h>
void shsor(int s[], int n)
{
int i, j, d;
d = n/2;
while(d>=1)
{
for(i=d+1; i<=n; i++)
{
s[0] = s[i];
j = i-d;
while(( j>0 ) && ( s[0]<s[j] ))
{
s[j+d] = s[j];
j = j-d;
}
s[j+d] = s[0];
}
d = d/2;
}
}
int main()
{
int i;
int a[11] = {0,1,3,2,5,6,4,8,9,7,10};
//从小到大排序
shsor(a,10);
//输出数组
for(i=1; i<=10; i++)
{
printf("a[%d]=%d\t",i,a[i]);
if(i % 5 == 0)
printf ("\n");
}
}