排序

 

 

 

 

冒泡排序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    //从小到大排
    int a[10]={4,1,3,2,0,6,5,7,9,8};
    int ex=0;
    int i=0;
    int j=0;
    for( i=0;i<10;i++)
    {
    for( j=0;j<9-i;j++)//唯一需要注意的地方,j<9-i,最大为8,因为下面用到j+1可以到达9
        {
        if(a[j]>a[j+1])
            {
            ex=a[j+1];
            a[j+1]=a[j];
            a[j]=ex;
            }
        }
    }
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
}

快速排序:找个pivot,小的放左边,大的放右边

#include<stdio.h>
#include<stdlib.h>

void qsort(int a[],int left,int right)
{
int pivot=a[left];//把a[left]交给pivot,那么a[left]就等于空了,因此从右边开始找大的,放在a[left]下
//下面三个参数都是为了递归定义的
int start=left;
int end=right;
int index;

while(left<right){
    
while(a[right]>=pivot&&left<right)
    {
    right--;
    }
if(a[right]<pivot)
    {
    a[left]=a[right];
    }
while(a[left]<=pivot&&left<right)
    {
left++;
    }
if(a[left]>pivot)
    {
    a[right]=a[left];
    }
        
    
                }
a[left]=pivot;
index=left;//把现在中间的下标给index(也可以写做index=right)
if(start<index)
qsort(a,start,index-1);
if(end>index)
qsort(a,index+1,end);
    
}

int main()
{
    int a[10]={8,5,6,2,3,4,9,1,7,10};
    qsort(a,0,9);
    for(int i=0;i<10;i++)
    {
    printf("%d ",a[i]);
    }

    return 0;
}

 

 

 插入排序:

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    //从小到大排,
    int i=0;
    int j=0;
    int a[10]={4,1,3,2,0,6,5,7,9,8};
    for(i=2;i<10;i++)//a[0]是监视哨,a[1]是最初的有序序列,所以从i=2出发
    {
    a[0]=a[i];
    j=i-1;
    while(a[0]<a[j])
        {
        a[j+1]=a[j];
        j--;//无序插有序,前面是有序,所以j--
        }
    a[j+1]=a[0];//换完之后a[0]算大的(比a[j]大),放后面(a[j+1])
    }
    for(i=1;i<10;i++)
    printf("%d ",a[i]);
}

 

posted @ 2020-03-13 12:07  记得喝牛奶  阅读(120)  评论(0编辑  收藏  举报