当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

上海交通大学:《程序设计思想与方法》课程教学资源(PPT课件讲稿)函数指针的应用、气泡排序法

资源类别:文库,文档格式:PPTX,文档页数:11,文件大小:125.6KB,团购合买
点击下载完整版文档(PPTX)

函数指针的应用 把函数指针作为函数的参数 设计一个通用的排序函数,可以排序任何类型 的数据(比如struct类型) struct User { 按姓名排:Aice,Bob,Carol char *name; int dept; ; 按系号排:Carol,.Bob,Alice User heads[]= “Alice'”,10, “Bob”,5, “Carol'",1 ; LoCCS

函数指针的应用 把函数指针作为函数的参数 设计一个通用的排序函数,可以排序任何类型 的数据 (比如struct类型) struct User { char *name; int dept; }; User heads[ ]={ “Alice” , 10, “Bob” , 5, “ Carol” , 1 }; 按姓名排:Alice, Bob, Carol 按系号排:Carol, Bob, Alice

气泡排序法(回顾) 对数组元素进行扫描。第一遍扫描冒出一个最 大的气泡,放入最后一个位置。然后对剩余元 素再进行第二次冒泡,冒出最大的泡放入倒数 第二个位置,依次执行到最后一个元素。 ©伪代码表示 For (i=1;i<n;++i) 从元素0到元素n-进行冒泡,最大的泡 放入元素n-i; LoCCS

气泡排序法 (回顾) 对数组元素进行扫描。第一遍扫描冒出一个最 大的气泡,放入最后一个位置。然后对剩余元 素再进行第二次冒泡,冒出最大的泡放入倒数 第二个位置,依次执行到最后一个元素。 伪代码表示 For (i=1; i<n; ++i) 从元素0到元素n-i进行冒泡,最大的泡 放入元素n-i;

冒泡过程 ©从头到尾依次处理:比较相邻的两个元素,如 果大的在前小的在后,就交换这两个元素 这样经过从头到尾的检查,最大的一个就被交 换到最后了 © 如果在一次起泡中没有发生交换,则表示数据 都已排好序,不需要再进行起泡 LoCCS

冒泡过程 从头到尾依次处理:比较相邻的两个元素,如 果大的在前小的在后,就交换这两个元素 这样经过从头到尾的检查,最大的一个就被交 换到最后了 如果在一次起泡中没有发生交换,则表示数据 都已排好序,不需要再进行起泡

进一步细化 for (i=1;i<n;++i) 从元素0到元素n-i进行起泡,最大的泡放入元素n-i if (没有发生过数据交换)break; LoCCS

进一步细化 for (i=1; i<n; ++i) { 从元素0到元素n-i进行起泡,最大的泡放入元素n-i; if (没有发生过数据交换) break; }

罗 待冒泡的元素 5730421968 待冒泡的元素 待冒泡的元素 5 3 0 421768 9 30421567 89 待冒泡的元素 待冒泡的元素 0 3 2145678 9 0213456789 待冒泡的元素 0123456789 LoCCS

5 7 3 0 4 2 1 9 6 8 待冒泡的元素 5 3 0 4 2 1 7 6 8 9 待冒泡的元素 3 0 4 2 1 5 6 7 8 9 待冒泡的元素 0 3 2 1 4 5 6 7 8 9 待冒泡的元素 0 2 1 3 4 5 6 7 8 9 待冒泡的元素 0 1 2 3 4 5 6 7 8 9 待冒泡的元素

void sort(int a,int n) int i,j,tmp; bool flag; for (i=1;i<n;++i) {flag false; for (j=0;j<n-i;++j) if (a[j+1]<a[j]) [tmp a[];a[j]a[j+1];a[+1]=tmp;flag true;} if(flag)break;*一趟冒泡中没有发生交换,排序结束*/ cout <endl; for (i=0;i<n;++i)cout <ali]<<'' } LoCCS

void sort(int a[], int n) { int i, j, tmp; bool flag; for (i=1; i<n; ++i) {flag = false; for (j=0; j<n-i; ++j) if (a[j+1] < a[j]) {tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = true;} if (!flag) break;/* 一趟冒泡中没有发生交换,排序结束*/ } cout << endl; for (i=0; i<n; ++i) cout << a[i] << ' '; }

void sort(int a,int n) int i,j,tmp; bool flag; for (i=1;i<n;++i) {flag false; for (j=0;j<n-i;++j) if comp(&a[j+1],&a[j] W/a[j+1]a[j] (tmp a[j];a[]a[j+1];a[j+1]=tmp;flag true;} if(!flag)break;*一趟冒泡中没有发生交换,排序结束*/ cout <endl; for (i=0;i<n;++i)cout <a[i]<'' 子 LoCCS

void sort(int a[], int n) { int i, j, tmp; bool flag; for (i=1; i<n; ++i) {flag = false; for (j=0; j<n-i; ++j) if ( comp( &a[j+1], &a[j] ) //a[j+1] < a[j] {tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = true;} if (!flag) break;/* 一趟冒泡中没有发生交换,排序结束*/ } cout << endl; for (i=0; i<n; ++i) cout << a[i] << ' '; }

⑧ struct User { char *name; int dept; ; User heads[]={ “Alice”,10, Bob”,5, “Carol'',1 ; LoCCS

struct User { char *name; int dept; }; User heads[ ]={ “Alice” , 10, “Bob” , 5, “ Carol” , 1 };

int (*comp)(const void *const void *) void sort(User a[]int n,int (*comp)(const void *const void *) f int i,j; User tmp; bool flag; for (i=1;i<n;++i) {flag false; for (j=0;j<n-i;++j) if comp(&a[j+1],&a[]) {tmp a[];a[j]=a[j+1];a[j+1]tmp;flag true;} if(flag)break;一趟冒泡中没有发生交换,排序结束*! cout <endl; for (i=0;i<n;++i)cout <a[i].name <'In'; 3 LoCCS

int (*comp) (const void * , const void *); void sort(User a[ ], int n, int (*comp) (const void * , const void *)) { int i, j; User tmp; bool flag; for (i=1; i<n; ++i) {flag = false; for (j=0; j<n-i; ++j) if ( comp( &a[j+1], &a[j] )) {tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; flag = true;} if (!flag) break;/* 一趟冒泡中没有发生交换,排序结束*/ } cout << endl; for (i=0; i<n; ++i) cout << a[i].name << '\n'; }

int comp1(const void *p,const void *q) if(strcmp(static_cast(p)->name, static_cast(q)->name)(p)->dept- static_cast(q)->dept <0)return 1; return 0; LoCCS

int comp1 (const void *p, const void *q) { if (strcmp(static_cast(p) ->name, static_cast(q) ->name)(p)->dept- static_cast(q)->dept <0) return 1; return 0; }

点击下载完整版文档(PPTX)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共11页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有