标签: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