氣泡排序和優化

2021-09-28 15:27:21 字數 1629 閱讀 7507

**:

#pragma once

#includeusing namespace std;

void swap(int& x, int& y)//交換函式

void print(int* a, int len,int i)//輸出函式

cout << endl;

}void bubblesort(int* a, int len)//氣泡排序

print(a, len, i);

}}

#include"sort.h"

int main()

; int len = sizeof(a) / sizeof(a[0]);

bubblesort(a,len);

return 0;

}

第一次寫的時候第二層迴圈用的判定是ja[10]),而這個陣列只有10個數,所以會導致越界

執行結果:

可以看到第4趟已經排好序之後還是會繼續進行判斷

改良思路:只要一輪判斷中沒有發生任何交換,則這個陣列已經有序

**如下:

void bubblesort(int* a, int len)

} if (is_sort)//沒有進行交換則已經完成排序,退出

break;

print(a, len, i);

}}

執行結果:

實際在第一步完成時5,6,7,8,9,10已經是最大有序組了,但是程式還是會去按每次去掉乙個最大的數然後比較判斷,實際上可以在迴圈中判斷這個最大有序組的開始位置,將這個位置作為判斷的結束位置可以減少判斷次數

優化:(錯誤示範)看正確**直接拉到最後

void bubblesort(int* a, int len)

} if (is_sort)//沒有進行交換則已經完成排序,退出

break;

print(a, len, i);

}}

執行結果:

發現趟數還怎多了,理論上趟數應該一樣,不過內部比較的次數少了,輸出上是看不出來的

觀察後發現第一趟時5和3交換後就停止了,因為交換後stop的值立馬在j a[j + 1])

}if (is_sort)//沒有進行交換則已經完成排序,退出

break;

print(a, len, i);

}}執行結果:

和第一次優化後一樣,(o゜▽゜)o☆[bingo!]

氣泡排序和優化

計算機中解決問題,一定要學會問題分解,先解決比這個容易解決的問題,再慢慢加深 比如 我要對陣列排序,那麼我能不能先求陣列的最小值,放在第乙個位置,這樣一來反覆執行這個操作,就能排序了 比如 我要求子陣列的排序,那麼我先解決整個陣列的排序,然後在改進 變成子陣列的排序 package day7yue1...

氣泡排序 氣泡排序演算法優化

常用的排序演算法主要包括 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 簡單選擇排序 堆排序快速排序 4 歸併排序其中,氣泡排序算是最簡單的一種排序演算法 public class bubble int temp 0 for int i 0 iarr j 1 ...

優化氣泡排序

氣泡排序 bubble sort 重複遍歷需要排序的數列,依次比較兩個元素,如果順序錯誤就進行交換,直到不再需要交換為止。演算法步驟如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元...