选择排序算法
选择排序算法是一种原地排序算法,适用于小文件。由于选择操作时基于键值的且交换操作只在需要的时候才执行,所以选择排序常用于数值较大和键值较小的文件。优点是容易实现,原地排序(不需要额外的存储空间)。缺点是扩展性较差;O(N*N).
算法:
1)寻找序列中的最小值;
2)用当前位置的值交换最小值;
3)对所有元素重复上述过程,直到整个序列排序完成。
初始序列:{49 27 65 97 76 12 38}
第1趟:12与49交换:12{27 65 97 76 49 38}
第2趟:27不动 :12 27{65 97 76 49 38}
第3趟:65与38交换:12 27 38{97 76 49 65}
第4趟:97与49交换:12 27 38 49{76 97 65}
第5趟:76与65交换:12 27 38 49 65{97 76}
第6趟:97与76交换:12 27 38 49 65 76 97 完成
void Selection(int A[] ,int n){
int i,j,min,temp;
for(i=0;i<n;i++){
min=i; //假设第一个为最小的
for(j=i+1;j<n;j++){//查最小元素的下标位置
if(A[j]<A[min]){
min=j;
}
}
temp=A[min];
A[min]=A[i];
A[i]=temp;
}
}
package paixu; /** * Created by Administrator on 2017/9/29. */ public class Xuanpai { public static void selectSort(int[] a){ int i; int j; int temp=0; int flag=0; int n = a.length; for(i=0;i<n;i++){ temp=a[i]; flag=i; for(j=i+1;j<n;j++){ if(a[j]<temp){ temp=a[j]; flag=j; } } if(flag!=i){ a[flag]=a[i]; a[i]=temp; } } } public static void main(String[] args){ int i=0; int a[]={5,4,9,8,7,6,0,1,3,2}; selectSort(a); for(i=0;i<a.length;i++){ System.out.print(a[i]+" "); } System.out.println("\n"); } }
性能:
最坏情况下时间复杂度:O(N*N)
最好情况下时间复杂度:O(N)
平均情况下时间复杂度:O(N*N)
最坏情况下空间复杂度:O(1) 辅助