标签:include fine flag 思想 开始 containe amp big str
----------------
排序
----------------
冒泡排序思想:
“比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。”
#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;
}
标签:include fine flag 思想 开始 containe amp big str
原文地址:https://www.cnblogs.com/qtnt/p/11625529.html