冒泡排序和插入排序,选择排序

插入排序原理:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。

#include<stdio.h>
#include<stdlib.h>
void Embed(int a[],int n)
{
    int temp;
    int i,j;
    for(i=1;i<n;i++)
    {
        if(a[i]<a[i-1])
        {
            temp=a[i];
            for(j=i-1;(a[j]>temp)&&(j>=0);j--)
            {
                a[j+1]=a[j];
                a[j]=temp;
            }
        }
    }
}

冒泡排序:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

void MaoPao(int a[],int n)
{
    int i,j;
    int temp;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}

选择排序:在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

void Select(int a[], int n)
{
    int i, j, index, temp;
    for (i = 0; i< n-1; i++) {
        index = i;
        for (j = i+1; j < n; j++) {
            if (a[index] > a[j])
                index = j;
        }
        if (index != i) {
            temp = a[i];
            a[i] = a[index];
            a[index] = temp;
        }
    }
}

int main()
{
    int a[10]={6,1,8,5,4,23,3,88,9,125};
    // Embed(a,10);
    MaoPao(a,10);
    for(int i=0;i<10;i++)
        printf("%d,",a[i]);
}

 








posted @ 2017-09-01 14:04  小时候挺菜  阅读(880)  评论(0编辑  收藏  举报