排序算法 冒泡、選擇、插入排序

冒泡排序、選擇排序歸、并排序是三種最基礎的排序。在一些其他排序算法中也會有用到

冒泡排序

兩層循環(huán),兩兩比較,使之對比的數(shù)據(jù)越來越少,每次篩選出一個最大或者最小的數(shù)。

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

選擇排序

兩層循環(huán),內(nèi)層循環(huán)每次選出一個最大數(shù)的序號,放到數(shù)組最后

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

插入排序

從第二個數(shù)據(jù)開始,依次往前比較,若比前一個數(shù)小,則與之交換。若比前一個大,則代表比前面的數(shù)都小停止這層循環(huán)。進入下一次循環(huá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");
}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容