#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
//冒泡排序
void BubbleSort(int *arr, int sz)
{
int iTemp = 0;
for (int i = 0; i < sz; i++)
{
for (int j = sz-1; j > i; j-- )
{
if (arr[j] < arr[j-1])//把相邻两个数比较,如果后面的数较小就和前面的数换位置
{
iTemp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = iTemp;
}
}
}
}
//插入排序
void SelectSort(int arr[], int sz)
{
int iTemp = 0;//iTemp为当前最小数
int iPos = 0;
for (int i = 0; i < sz-1; i++)
{
iTemp = arr[i];
iPos = i;
for (int j = i+1; j < sz; j++)
{
//把所有数和第一个数进行比较,如果小于第一个数就记录下来,
//直到找到最小数,然后插入到最前面,然后找第二小的数换到第二位置,以此进行
if (arr[j]<iTemp)
{
iTemp = arr[j];
iPos = j;
}
}
arr[iPos] = arr[i];
arr[i] = iTemp;
}
}
void swap(int *arr, int one, int two)
{
int iTemp = 0;
iTemp = arr[one];
arr[one] = arr[two];
arr[two] = iTemp;
}
//快速排序,使用一个分界值,把小于它的全部放在他前面,大于它的放在它后面
//然后对前后两部分继续采取同样递归方式
void QuiteSort(int *arr, int iLeft, int iRight)
{
if (iLeft >= iRight)
{
return;
}
int i = 0;
int iLast = 0;//用于记录最近一次值移动的下标
swap(arr, iLeft, (iLeft+iRight)/2);//选定中间位置的值作为分界值,并把他移动到首位
iLast = iLeft;
for (i = iLeft+1; i <= iRight; i++)//把所有小于分界值的数全放在分界值后面
{
if (arr[i]<arr[iLeft])
{
swap(arr, ++iLast, i);//
}
}
swap(arr, iLeft, iLast);
QuiteSort(arr, iLeft, iLast-1);//对左边部分进行排序
QuiteSort(arr, iLast+1, iRight);//对右边部分进行排序
}
void main()
{
int arr1[16] = {1,32,11,53,2321,65, 888,12,33,124,86,9,54,21,65,37};
int arr2[16] = {1,32,11,53,2321,65, 888,12,33,124,86,9,54,21,65,37};
int arr3[16] = {1,32,11,53,2321,65, 888,12,33,124,86,9,54,21,65,37};
BubbleSort(arr1, 16);
for (int i=0; i<16;i++)
{
cout << arr1[i] << " ";
}
cout << endl;
SelectSort(arr2, 16);
for (int i=0; i<16;i++)
{
cout << arr2[i] << " ";
}
cout << endl;
QuiteSort(arr3, 0, 15);
for (int i=0; i<16;i++)
{
cout << arr3[i] << " ";
}
cout << endl;
system("pause");
return ;
}
冒泡排序、插入排序、快速排序的简单实现
最新推荐文章于 2022-03-25 11:32:09 发布