//手写实现冒泡排序 -> 稳定的排序->O(n^2)
void BubbleSort(int arr[], int len)
{
for (int i = 0; i < len - 1; i++)//每一次循环,确定好一个元素的位置,要确定len-1个位置
{
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
//选择排序->一轮循环里面找出最小/最大的数与当前位置交换->不稳定
void PickSort(int * arr,int len)//如果传入指针,就必须还要传入长度
{
for (int i = 0; i < len-1; i++)//每一次循环,找到最小元素的位置,要确定len-1个元素位置
{
int min = arr[i];//最小元素
int pos = i;//最小元素的位置
for (int j = i+1; j < len; j++)//选择哪个交换
{
if (arr[j] < min) {
min = arr[j];
pos = j;
}
}
//一次循环,找到了数组中最小的元素,此时交换即可
swap(arr[i], arr[pos]);
}
}
//插入排序->不稳定的排序,往有序的数组里面插入要排序的元素->对于基本有序的数组,可以达到0(n)
void insertSort(int arr[],int len)
{
for (int i = 0; i < len; i++) {//对len个元素执行插入
for (int j = i; j > 0; j--)//寻找插入位置
{
if(arr[j] < arr[j - 1]) {
swap(arr[j], arr[j - 1]);
}
else {//因为前面的已经有序,故插入位置就在此处
break;
}
}
}
}
测试代码
int main()
{
int arr1[12] = { 3,46,3,35,65,22,688,4,42,50,0,34 };
int len = sizeof(arr1) / sizeof(len);
BubbleSort(arr1, len);//对一个数组求sizeof得到大小,但用做函数形参的时候,退化为指针,故一定要传入len
for (int i = 0; i < len; i++) cout << arr1[i] << " ";
cout << endl;
int arr2[12] = { 3,46,3,35,65,22,688,4,42,50,0,34 };
insertSort(arr2,len);
for (int i = 0; i < len; i++) cout << arr2[i] << " ";
cout << endl;
int arr3[12] = { 3,46,3,35,65,22,688,4,42,50,0,34 };
PickSort(arr3, len);
for (int i = 0; i < len; i++) cout << arr3[i] << " ";
cout << endl;
return 0;
}
输出结果