(1)冒泡排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 10
int main()
{
int a[LEN] = {4,3,8,7,2,6,9,1,5,0};
int i,j;
int tmp;
for(i=0;i<LEN-1;i++)
{
for(j=i+1;j<LEN-1-i;j++)
{
if(a[i]>a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
a[j] = tmp;
}
for(i=0;i<LEN;i++)
printf("-%d-",a[i]);
return 0;
}
(2)选择排序
#include <stdio.h> #define LEN 10 int main() { int a[LEN] = {4,3,8,7,2,6,9,1,5,0}; int i,j; int min_value; int min_pos; for(i=0;i<LEN-1;i++) { min_value = a[i]; min_pos = i; for(j=i+1;j<LEN;j++) { if(a[j]<min_value) { min_value = a[j]; min_pos = j; } } if(min_value<a[i]) { a[min_pos] = a[i]; a[i] = min_value; } } for(i=0;i<LEN;i++) printf("-%d-",a[i]); return 0; }
(3)插入排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 10
int main()
{
int a[LEN] = {4,3,8,7,2,6,9,1,5,0};
int i,j;
int tmp;
for(i=0;i<LEN-1;i++)
{
tmp = a[i+1];
for(j=i+1;j>=0&&tmp<a[j-1];j--)
{
a[j] = a[j-1];
}
a[j] = tmp;
}
for(i=0;i<LEN;i++)
printf("-%d-",a[i]);
return 0;
}
(4)快速排序
#include <stdio.h>
void fast_sort(int *array,int l ,int r)
{
//已经递归到一个数了,不需要再排序
if( l >= r )
return ;
int left = l;
int right= r;
//假定num的数值是最左边的数值
int num = array[left];
while( left < right )
{
//从数组右边开始往左边遍历,把比num要小的数值放在左边来
while( num < array[right] && left<right)
right--;
array[left] = array[right];
//从数组左边还是往右遍历,把比num要大的数值放在右边来
while( num > array[left] && left<right)
left++;
array[right] = array[left];
}
//把num放回数组中,此时比num小的在左边,比num大的在右边
array[left] = num;
fast_sort(array, l ,left-1);//对num左侧剩下的数据进行快排
fast_sort(array, right+1, r);//对num右侧剩下的数据进行快排
}
int main()
{
int a[10] = {3,8,5,0,1,9,4,2,6,7};
fast_sort(a,0,9);
int k;
for(k=0;k<10;k++)
printf("-%d-",a[k]);
printf("\n");
return 0;
}
(5)希尔排序
#include <stdio.h>
void xier_sort(int *s,int n)
{
int i,j,temp;
int d;//增量
//增量一开始为总长度的一半,每次结束后除以2作为下一次的增量。
//只要增量大于0,就继续排序
for(d=n/2 ; d>0 ; d=d/2)
{
//从未排序区域的第一个数值往后遍历
for(i=d; i<n ; i++)
{
temp = s[i];//临时变量等于未排序区域中拿出来比较的数值
j = i;//j是从未排序区域中拿出来比较的数值的下标
if( temp < s[j-d])
{
while( j-d>=0 && temp< s[j-d])
{
s[j] = s[j-d];
j = j-d;
}
s[j]=temp;
}
// for(j=i; j-d>=0 && temp<s[j-1] ; j=j-d)
// s[j] = s[j-d];
s[j] = temp;
}
}
}
int main()
{
int a[10] = {3,8,5,0,1,9,4,2,6,7};
xier_sort(a,10);
int k;
for(k=0;k<10;k++)
printf("-%d-",a[k]);
printf("\n");
return 0;
}