排序小总结. 冒泡排序, 选择排序, 插入排序, 快速排序, 堆排序

冒泡排序

//
//  Bubble_Sort.c
//  Data_structure
//
//  Created by 양송 on 2020/06/12.
//  Copyright © 2020 양송. All rights reserved.
//

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


void print_list(int* List, int size)
{
    for(int i = 0; i< size;i++)
    {
        printf("%d ",List[i]);
    }
    printf("\n");
}

void Bubble_Sort(int* List,int size)
{
    for(int i = 0; i< size-1; i++)
    {
        for(int j = 0; j< size-i-1; j++)
        {
            if(List[j] < List[j+1])
            {
                int temp = List[j];
                List[j] = List[j+1];
                List[j+1] = temp;
            }
        }
    }
}


int main()
{
    srand((unsigned) time(NULL));
    int List[10];
    for(int i = 0; i< 5; i++)
    {
        int num = rand()%10+1;
        printf("%d ",num);
        List[i] = num;
    }
    printf("\n");
    
    Bubble_Sort(List,5);
    print_list(List,5);
    return 0;
}

选择排序

//
//  select_sort.c
//  Data_structure
//
//  Created by 양송 on 2020/06/12.
//  Copyright © 2020 양송. All rights reserved.
//

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


void secelt_sort(int* List, int size)
{
    int index = 0;
    for(int i = 0; i< size-1;i++)
    {
        int k = List[i];//取出第一个值和后面的比较
        int max = k;
        for(int j = i+1; j< size; j++)
        {
            if(List[j] > max)
            {
                index = j;
                max = List[j];
            }
        }
        List[i] = max;
        List[index] = k;
    }
}

void print_list(int* list, int size)
{
    for(int i = 0;i< size;i++)
    {
        printf("%d ",list[i]);
    }
    printf("\n");
}
int main()
{
    srand((unsigned)time(NULL));
    int List[10];
    for(int i = 0; i< 10; i++)
    {
        int num = rand()%10+1;
        printf("%d ", num);
        List[i] = num;
    }
    printf("\n");
    
    secelt_sort(List,10);
    print_list(List,10);
    return 0;
}

插入排序

//
//  insert_sort.c
//  Data_structure
//
//  Created by 양송 on 2020/06/12.
//  Copyright © 2020 양송. All rights reserved.
//

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

//O(N^2)

void print_list(int* list, int size)
{
    for(int i = 0;i< size;i++)
    {
        printf("%d ",list[i]);
    }
    printf("\n");
}

//将小的数字向前交换
void insert_sort(int* list, int size)
{
    for(int i = 1; i< size; i++)
    {
        int temp = list[i];
        int j = i-1;
        while(j >= 0)
        {
            if(list[j] > temp)
            {
                int k = list[j];
                list[j] = list[j+1];
                list[j+1] = k;
            }
            j--;
        }
        
    }
}


int main()
{
    srand((unsigned)time(NULL));
    int List[10];
    for(int i = 0; i< 10; i++)
    {
        int num = rand()%10+1;
        printf("%d ", num);
        List[i] = num;
    }
    printf("\n");
    
    insert_sort(List, 10);
    print_list(List,10);
    return 0;
}

快速排序

//
//  quick_sort.c
//  Data_structure
//
//  Created by 양송 on 2020/06/12.
//  Copyright © 2020 양송. All rights reserved.
//

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

//O(log(n))
int Adj_Array(int* List, int left, int right)
{
    int i = left;
    int j = right;
    int k = List[left];//取左边第一个值为基准值
    while(i!=j)
    {
        while(i!=j && List[j] > k)
            j--;
        if(j > i)
        {
            List[i] = List[j];
            i++;
        }
        
        while(i!=j && List[i] < k)
            i++;
        if(i < j)
        {
            List[j]  = List[i];
            j--;
        }
    }
    List[i] = k;
    return i;
    
}

void quick_sort(int* List, int left, int right)
{
    if(left < right)
    {
        int temp = Adj_Array(List, left, right);
        quick_sort(List, 0, temp);
        quick_sort(List, temp+1, right);
    }
}

void print_list(int* list, int size)
{
    for(int i = 0;i< size;i++)
    {
        printf("%d ",list[i]);
    }
    printf("\n");
}
int main()
{
    srand((unsigned)time(NULL));
    int List[5];
    for(int i = 0; i< 5; i++)
    {
        int num = rand()%10+1;
        printf("%d ", num);
        List[i] = num;
    }
    printf("\n");
    
    quick_sort(List, 0, 4);
    print_list(List,5);
    return 0;
}

堆排序

//
//  Heap_Sort.c
//  Data_structure
//
//  Created by 양송 on 2020/06/12.
//  Copyright © 2020 양송. All rights reserved.
//

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


//nlogn
#define parent(x) (x-1)/2

void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void create_heap(int* List, int size) // max_heap
{
    for(int i = 1; i< size;i++)
    {
        int child = i;
        
        while(child > 0)
        {
            int root = parent(child);
            if(List[child] > List[root])
                swap(&List[child], & List[root]);
            child = root;//root 与 child 交换
        }
    }
}

void heap_sort(int* List, int size)
{
    for(int i = size-1; i>= 0; i--)
    {
        swap(&List[0], &List[i]);
        
        create_heap(List, i);
    }
}

void print_heap(int* list, int size)
{
    for(int i = 0; i< size; i++)
    {
        printf("%d ",list[i]);
    }
    printf("\n");
}

int main()
{
    int list[5];
    srand((unsigned)time(NULL));
    
    for(int i = 0; i< 5;i++)
    {
        int num = rand()%10+0;
        list[i] = num;
        printf("%d ", num);
    }
    printf("\n");
    
    create_heap(list,5);
    print_heap(list, 5);
    heap_sort(list, 5);
    print_heap(list, 5);
    
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值