(1)简单选择排序和堆排序的基本思想是什么?
(2)选择排序的本质是什么
一、简单选择排序
简单选择排序最佳情况下,记录移动次数为0, 最坏情况下,记录移动次数n-1。外层循环进行了n-1趟选择,第i趟选择要进行n-i次比较,忽略移动记录时间(为一常数)。所以总时间是(n-1)*(n-i)=n^2-(i+1)*n+i。时间复杂度为O(n^2)。
在排序的过程中,
第一趟排序后,A[1]已经有顺序了,需要排序的是A[2...n]。
这是一个待排序序列中记录不断减少的递归过程。我们每次都是从待排序记录中选择最小的那个记录作为待排序的首元素进行交换。可以用递归进行简单选择排序。
//简单选择排序
public void simpleSelectionSort1(int a[], int n){
//进行n次选择,n为数组的长度
for(int i=0;i<n;i++){
int index=i ,j ,temp=a[i];
//每次选择出当前待排序记录中的最小/大记录
//n-1表示下表,n-1-i进行第i次选择的起始位位置
for(j=i;j<n-1;j++){
if(a[j+1]<a[j]){
index=j;
temp=a[j];
}
}
if(a[j]>temp)index=j;
//最小值交换
if(index!=i){
a[i]=a[i]+a[index];
a[index]=a[i]-a[index];
a[i]=a[i]-a[index];
}
}
}