排序也是写程序中比较常用的算法,一定要掌握的。有很多排序方法,一般的只要掌握几个常用的就行了。冒泡是我接触最早的排序,也比较如以理解。介绍一下关键点:例如有一个整数数组 int a [6] = {4, 9, 2, 6, 1, 3},按从小到大排列。
1。冒泡排序是把相邻(a[i], a[i+1])的两个数比较,把较大的数放在后面。
2.循环次数:a[6]数组的长度是6,那只需比较5次就可以排好了,第一趟选出最小的一个放在第一个位置,第二趟选出第二小的放在第二个位置。最后一个不用比较一定是最大的。所以只需5次。
#include<stdio.h>
/*
time:2015/6/22
@author:liuxinquan
*/
//冒泡排序
void bubble_sort(int a[])
{
int i, j, k;
for(i=1; i<6; i++) //一共比较5次,i为1时,选出最小的一个
{
for(j=5; j>=i; j--) //从最后一个数开始查看是否最小
{
if(a[j]<a[j-1]) //相邻的两个数比较,注意还有一个排序在这不一样
{
//这4行完成交换
int t;
t= a[j];
a[j] = a[j-1];
a[j-1] = t;
}
}
}
//输出数组
for(k=0; k<6; k++)
{
printf("%d ", a[k]);
}
}
//主函数,测试。
int main(void)
{
int a[6] = {4, 9, 2, 6, 1, 3};
bubble_sort(a);
}
另一种冒泡排序,也算是选择排序。对比两个不同处:
#include<stdio.h>
void sample_sort(int a[])
{
int i, j, k;
for(i=0; i<5; i++) //一共比较5次,i为1时,把第一个位置上的数和后面的依次比较
{
for(j=i+1; j<6; j++) //从要比较的数后面的数开始,就是第一个数先和第二个数开始比较,
{
if(a[i]>a[j]) //和上面的区别,比较数的位置不变,就是一直是a[i]位置和后面的数比较
{
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
//输出数组
for(k=0; k<6; k++)
{
printf("%d ", a[k]);
}
}
//主函数,测试。
int main(void)
{
int a[6] = {4, 9, 2, 6, 1, 3};
sample_sort(&a);
}