一、排序概念:是將一組數據按照特定規則重新排列的過程,是計算機科學中最基礎且重要的算法之一。
二、排序的基本要素
排序鍵(Key):是排序過程中用于比較和確定元素順序的特定數據項或數據屬性。
穩定性:排序過程中,相等元素的相對位置是否保持不變
穩定排序:相等元素排序后相對位置不變
不穩定排序:相等元素排序后相對位置可能改變
排序方向:
升序排序(從小到大)
降序排序(從大到小)
時間復雜度:在計算機科學中,時間復雜性,又稱時間復雜度,算法的時間復雜度是一個函數,它定性描述該算法的運行時間。時間復雜度是衡量算法執行時間隨輸入規模增長而變化的度量標準,是算法分析的核心概念。
空間復雜度:空間復雜度(Space Complexity)是對一個算法在運行過程中臨時占用存儲空間大小的量度,通常用大O符號表示。
設計算法時,時間復雜度和空間復雜度往往存在權衡關系,優秀的算法設計需要在兩者之間找到平衡點,有兩種常用解決方法:一個是空間換時間,就是說使用額外存儲空間來減少計算時間;一個是時間換空間,就是說減少存儲空間但增加計算時間,在實際的開發過程中,要根據實際資源的情況進行調整。
三、排序算法分類
1、比較排序
冒泡排序
選擇排序
插入排序
希爾排序
歸并排序
快速排序
堆排序
2、非比較排序
計數排序
桶排序
基數排序
四、冒泡排序
- 冒泡排序 (Bubble Sort)
原理:重復比較兩個相鄰的元素,將較大的元素逐步"冒泡"到數組末尾。
舉例說明:
將23、8、25、4、11按從小到大輸出。
第一趟排序
23 8 25 4 11 原數列
8 23 25 4 11 第一次
8 23 25 4 11 第二次
8 23 4 25 11 第三次
8 23 4 11 25 第四次,即比較結果(每一趟最后一次排序結束后,最大的數據“浮出水面”,即找到最大的數)
第二趟排序
8 23 4 11 原數列(此時已經確定25是最大的數,因此25就不再參與比較)
8 23 4 11 第一次
8 4 23 11 第二次
8 4 11 23 第三次,即比較結果
規律:如果有n個數進行排序,需要則進行n-1趟的比較,在第j趟中進行n-j次相鄰兩個數的比較。
根據上面的規律,代碼實現
main( )
{
int a[10];
int i,j,t;
printf(“input 10 number:\n”);
for (i=0; i<10; i++)
{
scanf(“%d”,&a[i]);
}
printf(“\n”);
for(j=1;j<10;j++)
for( i=0;i<10-j; i++)
if (a[i]>a[ i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf(“the sorted number:\n”);
for ( i=1; i<11; i++)
printf(“%d”,a[i]);
}