简单选择排序
时间复杂度O(n^2)
空间 O(1)
void SelectSort(int *a){
for(int i = 1; i <= a[0]; i++){
int mindex = i;
for(int j = i+1; j <= a[0]; j++){
if(a[mindex] > a[j]){
mindex = j;
}
}
int temp = a[i];
a[i] = a[mindex];
a[mindex] = temp;
}
}
堆排序
时间复杂度 O(n*log n)以2 为底
空间 O(1)
适用于 1000000个数里找 10个最大(小)的 ,速度快 ,如果数据量小,建议不要用
void Sift(int *a, int low, int high){
int i = low;
int j = 2 * i;
int temp = a[i];
while(j <= high){
if(j < high && a[j] < a[j+1])
j++;
if(temp < a[j])
{
a[i] = a[j];
i = j;
j = 2 * i;
}
else
break ;
}
a[i] = temp;
}
void heapSort(int *a){ //堆排序
for(int i = a[0]/2; i >= 1; i--)
Sift(a, i, a[0]);
for(int i = a[0]; i >= 2; --i){
int temp = a[1];
a[1] = a[i];
a[i] = temp;
Sift(a, 1, i-1);
}
}
int main()
{
int n;
cout << "输入无序数组的个数 :" << endl;
cin >> n;
int *a = new int[n+1];
a[0] = n;
for(int i = 1; i <= a[0] ; i++){
cin >> a[i];
}
//堆排序
heapSort(a);
for(int i = 1; i <= a[0]; i++){
cout << a[i] << " " ;
}
cout << endl;
return 0;
}