选择排序
来源:互联网 发布:张国荣但愿人长久知乎 编辑:程序博客网 时间:2024/06/07 12:11
简单选择排序与二元选择排序
简单选择排序:通过n-i次关键字间的比较,从n-i-1个记录中选出关键字最小的记录,并和第i个记录进行交换。
实现算法:
#include <stdio.h>#include <stdlib.h>//输出每次排序结果void sout(int num[] ,int n ,int i){ printf(" %d : ",i); int j ; for (j=0 ; j<n ; j++) printf("%d ",num[j]); printf("\n");}//简单选择排序void selectSort(int num[],int n){ int i,j; for (i=0 ; i<n-1 ;i++) { for (j=i+1; j<n ;j++) { if (num[i]>num[j]) { int tmp = num[i]; num[i] = num[j]; num[j] = tmp; } } sout(num,n,i); }}int main(void){ int a[9] = {9,5,8,7,4,6,3,2,1}; int i; //time(a,8); //shellSort2(a,9); selectSort(a,9); for (i=0 ; i<9 ; i++) { printf("%d ",a[i]); } return 0;}
其复杂度为O(n^2)
二元选择排序:
#include <stdio.h>#include <stdlib.h>//输出每次排序结果void sout(int num[] ,int n ,int i){ printf(" %d : ",i); int j ; for (j=0 ; j<n ; j++) printf("%d ",num[j]); printf("\n");}//二元选择排序void selectSort(int num[],int n){ int max,min,i,j; for (i=0 ; i<n/2 ;i++) { max = i; min = i; for (j=i+1; j<n-i ;j++) { if (num[j]<num[min]) { min = j; continue; } if (num[j]>num[max]) { max = j; } } int temp = num[min]; num[min] = num[i]; num[i] = temp ; //如果一次遍历最大数角标正好为i,则其实是将角标n-i-1 //对应的值和上面的min进行交换 if (i==max) { temp = num[n-i-1]; num[n-i-1] = num[min]; num[min] = temp; } else { temp = num[max]; num[max] = num[n-i-1]; num[n-i-1] = temp; } sout(num,n,i); }}int main(void){ int a[9] = {9,5,8,7,4,6,3,2,1}; int i; //time(a,8); //shellSort2(a,9); selectSort(a,9); for (i=0 ; i<9 ; i++) { printf("%d ",a[i]); } return 0;}
0 0
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序:
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- 选择排序
- linux 嵌入式开发板 iwlist、iwconfig、 iwpriv 命令使用
- 使用SVG实现圆环loading进度效果
- Google面试和一些玩具
- SPOJ DISUBSTR
- Material Design(一)
- 选择排序
- Arcgis: Coordinate Issue
- kafka+storm+redis整合
- 关于分布式事务、两阶段提交协议、三阶提交协议
- linux运算统计案例
- 非XA式Spring分布式事务
- 最小生成树
- ScrollView嵌套listview,并计算listview的高度
- 多个并行线程运算