美文网首页
排序算法 冒泡、选择、插入排序

排序算法 冒泡、选择、插入排序

作者: 分流替躺欧阳克 | 来源:发表于2019-11-20 13:52 被阅读0次

冒泡排序、选择排序归、并排序是三种最基础的排序。在一些其他排序算法中也会有用到

冒泡排序

两层循环,两两比较,使之对比的数据越来越少,每次筛选出一个最大或者最小的数。

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");
}

相关文章

网友评论

      本文标题:排序算法 冒泡、选择、插入排序

      本文链接:https://www.haomeiwen.com/subject/aaoayctx.html