冒泡排序、选择排序归、并排序是三种最基础的排序。在一些其他排序算法中也会有用到
冒泡排序
两层循环,两两比较,使之对比的数据越来越少,每次筛选出一个最大或者最小的数。
void SortManager::bubbleSort(int *a,int len)
{
int max = len-1;
int i,j;
for (i = 0; i < max; i++)
{
for (j = 0;j< max - i; j++)
{
if (a[j+1] < a[j])
{
swap(a, j, j+1);
}
}
}
printArr(a, len);
}
选择排序
两层循环,内层循环每次选出一个最大数的序号,放到数组最后
void SortManager::selectionSort(int *arr,int n)
{
printf("选择排序\n");
for (int i = 0; i<n; i++) {
int minIndex = i;
for (int j = i + 1; j<n; j++) {
//printf("%d",arr[j]);
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
printArr(arr, n);
}
插入排序
从第二个数据开始,依次往前比较,若比前一个数小,则与之交换。若比前一个大,则代表比前面的数都小停止这层循环。进入下一次循环。
void SortManager::insertionSort(int *arr,int len)
{
printf("\n------------插入排序-----------\n");
for (int i = 1; i < len; i++) {
for (int j = i; j>0; j--) {
if (arr[j] < arr[j-1]) {
swap(arr[j], arr[j-1]);
}else{
break;
}
}
}
printArr(arr, len);
printf("\n------------插入排序-----------\n");
}
网友评论