氣泡排序演算法:顧名思義,就是將最重的(最大元素)浮動到最下面,最輕的(最小元素)浮動到最上面.
演算法過程:
1.迴圈陣列長度length-1次,下標為i.
因為每次迴圈後就會出現乙個最大(公升序)或最小(降序),只需要比較n-1就行
1.1 在前 length-i個元素中迴圈因為已經有i個已經有序
1.1.2 比較當前元素與後乙個元素的大小,如果前者比後者大交換(公升序)
//氣泡排序
template void bubblesort(sqlist&l)//endif
}//endfor
}//endfor
}
注意:上述演算法會對已經有序的部分也進行比較,這不是我們所想要的,可以想辦法讓已經有序的部分不在比較.
1.可以通過設定標誌位,如果發生了交換,則把較大的已經放在後面了,後面的已經有序,不需要在比較後面一有序的部分了,直接進入下一次迴圈中即可.
2.也可以將上次交換的位置記住,交換後的是有序的,只需要比較交換位置前面的部分即可.
氣泡排序演算法優化演算法
首先任意選取乙個資料(通常選用陣列的第乙個數)作為樞軸,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對位置也許會在演算法結束時產生變動。
參考大神部落格,大佬部落格
int partition(int l,int low,int high)//endwhile
l[low] = l[high];//將比樞軸小的移動至低端此元素參與小於樞軸的比較
while(low < high && l[low] <= pivo)//endwhile
l[high] = l[low];//將比樞軸大的記錄移至高階
}//endwhile
l[low] = l[0]; //樞軸記錄到位
return low; //返回樞軸位置
}void qsort(int l,int low,int high)//endif
}
交換排序 氣泡排序,快速排序
交換排序 氣泡排序,快速排序 執行環境 vs2010 include include include include define ok 1 define true 1 define false 0 define maxsize 50 typedef struct redtype typedef s...
交換排序(快速排序 氣泡排序)
1.快速排序 先從數列中取出乙個數作為基準數 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊 再對左右區間重複第二步,直到各區間只有乙個數。以乙個陣列作為示例,取區間第乙個數為基準數。0 1 2 3 4 5 6 7 8 9 72 6 57 88 60 42 83 73 4...
交換排序 氣泡排序 快速排序
void bubblesort int arr,int size if issorted 1 void quicksort int arr,int left,int right if left right int div partition 01 arr,left,right 分成左右小區間 lef...