目录
正文
简介
其中排序算法总结如下:
一.交换排序
交换排序的基本思想都为通过比较两个数的大小,当满足某些条件时对它进行交换从而达到排序的目的。
1.冒泡排序
基本思想:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
#include//冒泡排序算法voidbubbleSort(int*arr,int n) {
for(inti =0; i
for(intj =0; j < n - i -1; j++)
{
//如果前面的数比后面大,进行交换if(arr[j] > arr[j +1]) {
inttemp = arr[j]; arr[j] = arr[j +1]; arr[j +1] = temp;
}
}
}int main() {
intarr[] = {10,6,5,2,3,8,7,4,9,1 };
intn =sizeof(arr) /sizeof(int);
bubbleSort(arr, n);
printf("排序后的数组为:\n");
for(intj =0; j
printf("%d ", arr[j]);
printf("\n");
return0;
分析:
最差时间复杂度为O(n^2),平均时间复杂度为O(n^2)。稳定性:稳定。辅助空间O(1)。
升级版冒泡排序法:通过从低到高选出最大的数放到后面,再从高到低选出最小的数放到前面,如此反复,直到左边界和右边界重合。当数组中有已排序好的数时,这种排序比传统冒泡排序性能稍好。
#include//升级版冒泡排序算法voidbubbleSort_1(int*arr,int n) {
//设置数组左右边界intleft =0, right = n -1;
//当左右边界未重合时,进行排序while(left
//从左到右遍历选出最大的数放到数组右边for(inti =left; i < right; i++)
{
if(arr[i] > arr[i +1])
{
inttemp = arr[i]; arr[i] = arr[i +1]; arr[i +1] = temp;
}
}
right--;
//从右到左遍历选出最小的数放到数组左边for(intj = right;j> left; j--)
{
if(arr[j +1] < arr[j])
{
inttemp = arr[j]; arr[j] = arr[j +1]; arr[j +1] = temp;
}
}
left++;
}
}int main() {
intarr[] = {10,6,5,2,3,8,7,4,9,1 };
intn =sizeof(arr) /sizeof(int);
bubbleSort_1(arr, n);
printf("排序后的数组为:\n");
for(intj =0; j
printf("%d ", arr[j]);
printf("\n");
return0;
}