十大经典算法-选择排序(java版本)
1.实现逻辑
- <1>.初始状态:无序区为R[1..n],有序区为空;
- <2>.第i趟排序(i=1,2,3...n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序 从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
- <3>.n-1趟结束,数组有序化了。
2.代码实现
public class SelectSort { public static void main(String[] args) { int a[] = {6,3,1,2}; int b[] = selectsort(a); for (int k=0;k< b.length;k++){ System.out.println(b[k]); } } //基本的选择排序 public static int [] selectsort(int a[]){ //初始最大值位置 int maxpos = 0; for(int i=0;i<a.length-1;i++){ maxpos = 0; for(int j=0;j<a.length-i-1;j++){ if(a[j]>a[maxpos]){ maxpos = j; } } if(maxpos != a.length-i-1){ //交换两个数大小 // int tmp = a[a.length-i-1]; // a[a.length-i-1] = a[maxpos]; // a[maxpos] = tmp; change(a,maxpos,a.length-i-1); } } return a; } //交换两个数大小 //值传递 引用传递 public static void change(int [] arr,int indexI,int indexJ){ int temp = arr[indexI]; arr[indexI] = arr[indexJ]; arr[indexJ] = temp; } }
3.时间复杂度
- 最佳情况:T(n) = O(n2)
- 最差情况:T(n) = O(n2)
- 平均情况:T(n) = O(n2)
非学无以广才,非志无以成学。
正是因为今天的不完美,才对未来充满希望。
----长帆