数据结构
Posted qtnt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构相关的知识,希望对你有一定的参考价值。
----------------
排序
----------------
冒泡排序思想:
“比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。”
#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;
以上是关于数据结构的主要内容,如果未能解决你的问题,请参考以下文章