package com.colin;
/**
*
* @author Colin Yan
*
*/
public class SelectionSort {
/** 时间复杂度 */
private static int timeComplexity;
public static void sort(int arr[]) {
for (int i = 0; i < arr.length - 1; i++) {
int minTemp = arr[i];
int minPos = i;
for (int j = minPos + 1; j < arr.length; j++) {
timeComplexity++;
if (arr[j] < minTemp) {
minTemp = arr[j];
minPos = j;
}
}
// 三次异或交换数值,两个数字的内存引用不能相同,否则被置0,且无法恢复
if (minPos != i) {
arr[i] ^= arr[minPos];
arr[minPos] ^= arr[i];
arr[i] ^= arr[minPos];
}
}
}
private static int calcByFormula(int n) {
return (n - 1) * (n) / 2;
}
public static void main(String[] args) {
int arr[] = new int[] { 3333, 1, 2, 34, 2, 67, 889, 56 };
sort(arr);
System.out.println("排序数组长度n为:" + arr.length);
System.out.println("公式计算时间复杂度:" + calcByFormula(arr.length));
System.out.println("实际计算时间复杂度:" + timeComplexity);
for (int i : arr) {
System.out.println(i);
}
}
}
选择排序法,循环,非递归,JAVA版
最新推荐文章于 2023-09-28 17:57:33 发布