选择排序: 堆排的前身
实现思路:每次选择最小的放在最前面,或者选择最大的放在后面
时间复杂度 最好o(n^2) 最坏o(n^2) 平均o(n^2)
#include <iostream>
using namespace std;
void Insertsort(int* arr,int len)
{
if(arr == NULL || len<=0)
throw"数据异常";
int index;/*记录操作的下标*/
for(int i=0;i<len-1;i++)
{
index = i;
for(int j = i+1;j<len;j++)
{
if(arr[index] > arr[j])
{
index = j;
}
}
if(i!=index)/*如果相同,抑或自己就没了*/
{
arr[i] = arr[i]^arr[index];
arr[index] = arr[i]^arr[index];
arr[i] = arr[i]^arr[index];
}
}
}
int main()
{
int arr1[] = {3,0,1,6,2,5,4,7,8,9};
int arr[] = {6,9,7,4,1,3,8,5,2,0};
int arr2[] = {3,1,4,2,5,6,7,8,9};
Insertsort(arr,sizeof(arr)/sizeof(arr[0]));
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
printf("%d\n",arr[i]);
return 0;
}