选择排序
来源:互联网 发布:kali linux双系统安装 编辑:程序博客网 时间:2024/06/05 03:23
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
#include <stdio.h>#define NUM 9main(){ int i,num[NUM] = {3,6,1,4,2,9,7,5,8}; for(i=0;i<NUM;i++) { printf("%d",num[i]); } printf("\n"); paixufa(num); for(i=0;i<NUM;i++) { printf("%d",num[i]); }}int paixufa(int num[]){ int i,j,k,t; for(i=0;i<NUM-1;i++) { k=i; for(j=i+1;j<NUM;j++) { if(num[i]>num[j]) { k=j; t = num[i]; num[i] = num[j]; num[j] = t; } } }}
另一种方式
#include <stdio.h>#define N 8main(){ int i,arr[N] = {3,6,5,2,1,4,8,7}; for(i=0;i<N;i++) { printf("%d ",arr[i]); } printf("\n"); paixu(arr); for(i=0;i<N;i++) { printf("%d",arr[i]); }} paixu (int arr[]){ int i , j , k,temp; for(i=0;i<N;i++) { k= i ; for(j=i+1;j<N;j++) { if(arr[j]>arr[k]) { k=j;//如果元素J的值大于K 赋值 那么下面的K肯定不等于i然后交换 大的值就在前面了 } } if(k!=i) { temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } }}
刚把指针学完了,现在用指针的方法实现选择排序
#include <stdio.h>#define NUM 5main(){ int arr[NUM]={2,5,3,4,8}; int * p =arr; change(p); int i; for(i=0;i<NUM;i++) { printf("%d",arr[i]); } } change(int *a){ int temp,i,j; for(i=0;i<NUM;i++) { for(j=i+1;j<NUM;j++) { if(*(a+i)<*(a+j)) { temp = *(a+j); *(a+j) = *(a+i); *(a+i) = temp; } } } }
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序:
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- CListCtrl使某一行高亮
- yii gii的使用方法
- 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法
- IOS 开发必备网址
- 选择排序
- 负数的除法和右移的区别
- Delphi for iOS开发指南(8):在iOS应用程序中使用Tab组件来显示分页
- XML文件解析(SAX方式)
- SAX解析XML文档
- shell 中数学计算
- Mule ESB Studio v3.3使用安装以及详细案列
- 一款免费的.NET智能持续测试运行工具——Mighty-Moose
- sharepoint 2010 关于程序集生成失败,引用的程序集没有强名称的解决办法