小伙伴们刚接触到c语言编程时,排序肯定是会经常遇到的问题类型,这里贴出冒泡排序和选择排序的代码
冒泡排序bubble_sort :动态感觉上是最大值(或最小值)经过依次遍历后,不断下沉(或上浮)出来。第一次遍历,这组数最大的(或最小值)显现出来,出现在数组的开头或结尾,然后可以对剩下的数组在进行一遍操作,这样慢慢的最值依次被选出并排好序。
选择排序select_sort :顾名思义,从头开始,选出第一个数作为标记,然后从后面的数组中找出最小的和标记位比较,若是标记位大一些,则交换位置。这样的话经过一遍循环,最小值就出现在第一位了。
代码:
#include <stdio.h>
#include <stdlib.h>
#define max 10
void bubble_sort(int a[], int n)
{
int t,i,j;
for(i = n-1; i >= 0; i--){ //从最后以为开始设置标签,标签从最后一位左移
for(j = 0 ; j < i ; j++){ //然后从第一位到标签为依次遍历
if(a[j] < a[j+1]){ //如果有前一项比后一项小的
t = a[j]; //就交换位置,让小的放在后面
a[j] = a[j+1];
a[j+1] = t; //第一遍循环下来,最小的位肯定是最后一位
}
}
}
}
void select_sort(int a[], int n)
{
int k,i,j,temp;
for(i = 0;i<n;i++){
k = i; //从第一位开始做标记
for(j = i+1;j<n;j++){ //从标记位的下一位遍历到最后一位
if(a[j]<a[k]){ //如果出现比标记位小的,则改变标志位,设置小的为标志位
k = j;
}
}
if(k != i){ //每一次遍历之后,标志位上的是最小位,此时与原标记项比较,若是标记位改变,则交换两次的值
temp = a[i]; //这么做一轮下来,小的是第一位
a[i] = a[k];
a[k] = temp;
}
}
}
int main()
{
int a[max] = {20,10,25,9,90,6,21,1,3,35};
//bubble_sort(a,10);
select_sort(a,10);
int i;
for(i = 0; i < 10; i ++){
printf("%d ",a[i]);
}
return 0;
}