前言:将三种排序算法温习了一遍,感觉年纪大了,刚开始还是有点废脑子
//冒泡排序:
void bubble_sort(int arr[],int size)
{
for(int i=0; i<size; i++)
{
bool flag = false;
for(int j=0; j<size-i-1; j++)
{
if(arr[j+1] < arr[j])
{
arr[j+1] ^= arr[j];
arr[j] ^= arr[j+1];
arr[j+1] ^= arr[j];
}
flag = true;
}
if(!flag)
break;
}
}
插入排序:
void insert_sort(int arr[],int size)
{
for(int i=1; i<=size; i++)
{
int value = arr[i];
int j = i-1;
for(; j>=0; j--)
{
if(arr[j] > value)
arr[j+1] = arr[j];
else
break;
}
arr[j + 1] = value;
}
}
//选择排序:
void select_sort(int arr[],int size)
{
for(int i=0; i<size; i++)
{
int min = i;
for(int j = i+1; j<size;j++)
{
if(arr[min] > arr[j])
{
min = j;
}
}
if(min != i)
{
arr[min] ^= arr[i];
arr[i] ^= arr[min];
arr[min] ^= arr[i];
}
}
}
int main()
{
int arr[10] = {27,46,98,14,63,38,88,71,9,55};
//bubble_sort(arr,10);
//insert_sort(arr,10);
select_sort(arr,10);
for(int value:arr)
{
qDebug() << value;
}
}
冒泡排序跟插入排序的最好时间复杂度为O(n),最坏为O(n²),平均为O(n²)。选择排序的三种复杂度都是O(n²)。
另外冒泡跟插入是稳定的,选择不稳定。