為了能給老是忘記的自己做個筆記。
冒泡排序(升序)的思想就是將最大的數(shù)逐步后移,例如:arr[n] ={5, 9, 8, 6, 7},i從數(shù)組下標(biāo)0開始,j從數(shù)組下標(biāo)n-1開始,依次將arr[j]與arr[j-1]比較,如果arr[j] < arr[j-1]就將arr[j]與arr[j-1]交換,直到j(luò) = i;
C++代碼:
#include <iostream>using namespace std;void swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t;}void sort(int p[], int n){ for(int i = 0; i < n; i++){ for(int j = n-1; j > i; j--){ if(p[j] < p[j-1]){ swap(&p[j], &p[j-1]); } } } for(int i = 0; i < n; i++){ cout << p[i] <<" "; }}int main(){ int n, *p; cin >> n; p = new int[n]; for(int i = 0; i < n; i++){ cin >> p[i]; } sort(p, n); return 0;}改進(jìn):設(shè)置bool型變量temp,當(dāng)上一次循環(huán)沒有交換元素則證明排序已經(jīng)完成,無需進(jìn)行下一次排序,直接跳出循環(huán)。
C++代碼:
#include<iostream>using namespace std;void swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t;}void sort(int p[], int n){ bool temp; //設(shè)置變量,如果上次循環(huán)沒有交換則停止排序 for(int i = 0; i < n; i++){ temp = 0; for(int j = n-1; j > i; j--){ if(p[j] < p[j-1]){ temp = 1; swap(&p[j], &p[j-1]); } } if(temp == 1) break; } for(int i = 0; i < n; i++){ cout << p[i] <<" "; }}int main(){ int n, *p; cin >> n; p = new int[n]; for(int i = 0; i < n; i++){ cin >> p[i]; } sort(p, n); return 0;}新聞熱點
疑難解答