首页 > 其他 > 详细

数据结构

时间:2019-10-05 20:13:07      阅读:70      评论:0      收藏:0      [点我收藏+]

----------------

排序

----------------

冒泡排序:

#include <stdio.h>
#include "sort.h"


int main()
{
    ArrayList numlist = {
        {19,11,15,18,13,17,14,16,12},
        9,
    };
    PtArrayList pt_arraylist;
    pt_arraylist = &numlist;
    
    show((char *)"排序前 ", pt_arraylist);
    
    BubbleSort_Low(pt_arraylist);
//    BubbleSort_Mid(pt_arraylist);
//    BubbleSort_Mid_Opt(pt_arraylist);

    show((char *)"排序后 ", pt_arraylist);
    
    return 0;
}
//sort.h
#define True 1 
#define False 0
#define NUMSIZE 20
typedef struct {
    int array[NUMSIZE];
    int len;
}ArrayList, *PtArrayList; 

void show(char * info, PtArrayList * pt_arraylist); 
void BubbleSort_Low(PtArrayList * pt_arraylist);
void BubbleSort_Mid(PtArrayList * pt_arraylist);
void swap(int * first, int * second);

#include "sort_function.cpp"
//sort_function.cpp
void
BubbleSort_Mid_Opt(PtArrayList pt_arraylist) { int flag = True; //改进版 for (int i=0; i<pt_arraylist->len && flag; i++) { for (int j=0; j<pt_arraylist->len-i-1; j++) { //只有当第二层循环不出现一次True时, //才会有标志位False flag = False; if(pt_arraylist->array[j] > pt_arraylist->array[j+1]) { swap(&pt_arraylist->array[j], &pt_arraylist->array[j+1]); flag = True; } } } } void BubbleSort_Mid(PtArrayList pt_arraylist) { //对当前数字和其下一个相邻数字比较,大于则交换 //冒泡到最后一个数肯定是最大的,所以不需要比较,即len-1-i //i进行一次表明有i个数字已经排好 for (int i=0; i<pt_arraylist->len; i++) { for (int j=0; j<pt_arraylist->len-i-1; j++) { if(pt_arraylist->array[j] > pt_arraylist->array[j+1]) swap(&pt_arraylist->array[j], &pt_arraylist->array[j+1]); // printf("num[%d] = %d num[%d] = %d\n", j, pt_arraylist->array[j], j+1, pt_arraylist->array[j+1]); } } } void BubbleSort_Low(PtArrayList pt_arraylist) { //依次将数字位与后续其他位比较,升序,大则交换 for (int i=0; i<pt_arraylist->len; i++) { for (int j=i+1; j<pt_arraylist->len; j++) { if(pt_arraylist->array[i] > pt_arraylist->array[j]) swap(&pt_arraylist->array[i], &pt_arraylist->array[j]); } } } void show(char info[], PtArrayList pt_arraylist) { printf("%s", info); for (int i=0; i<pt_arraylist->len; i++) { printf("%d ", pt_arraylist->array[i]); } putchar(\n); } void swap(int * first, int * second) { int tmp; tmp = *first; *first = *second; *second = tmp; }

 

 
 

数据结构

原文:https://www.cnblogs.com/qtnt/p/11625529.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!