冒泡排序、选择排序

冒泡排序

  思路:

  一组数中,相邻的两个数进行比较、交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序。

  要想对N个数字进行排序,循环N次即可.

实现代码:

 void sort(int * a,int len)//接收主函数的数组地址,和长度
 {
     int temp;
     for(int i=0;i <= len - i;i++)    //需要比的趟数,假如有4个数,就需要比较3趟
         {
             for(int j = 0;j <= len-i-1;j++)  //每趟需要比较的次数
             {
                 if(a[j] > a[j+1])
                 {
                     temp = a[j];
                     a[j] = a[j+1];
                     a[j+1] = temp;
                 }
             }
         }
 }

选择排序

/*2017年12月10日11:08:52 
选择排序 
*思路:先将10个数中最小的数和a[0]对换;再将a[1]~a[9]中
*最小的数与a[1]对换......每一比较一轮,找出一个未经排序的数中最小的一个。共比较9轮
*  a[0]   a[1]  a[2]  a[3]  a[4] 
*  3       6     1     9     4      未排序的情况下
*  1       6     3     9     4        将5个数中最小的数1与a[1]对换 
*  1       3     6     9     4        将余的4个数中最小的数3与a[1]对换 
*  1       3     4     9     6        将余下的3个数中最小的数4与a[2]对换 
*  1       3     4     6     9        将余下的2个数中最小的数6与a[3]对换 
*                                    排序完成! 
*/                            
#include <stdio.h>
void sort(int a[],int n);
int main(void)
{
    int i,a[10];
    printf("请输入10个数:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    
    printf("排序前:");
    for(i = 0;i<10;i++)
        printf("%4d",a[i]);
        
    printf("
");
     
    sort(a,10);
    printf("排序后:");
    for(i = 0;i< 10;i++)
        printf("%4d",a[i]);
        
    return 0;           
}

void sort(int array[],int n)
{
    int i,k,j,t;
    for(i=0;i<n-1;i++)//需要比较的次数 
    {
        k = i;
        for(j = i+1;j<n;j++)
        {
            if(array[j] < array[k])//如果后一位数字比前一位小就交换数字 
            k = j;
        }
        
        t = array[k];
        array[k] = array[i];
        array[i] = t;
    }
    
}

 

  

  

原文地址:https://www.cnblogs.com/healy/p/8036991.html