摘要:1、冒泡排序 冒泡排序是一種簡單的排序方法,算法如下: 1. 首先將所有待排序的數字放入工作列表中。 2. 從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大于他的下一位,則將它與它的下一位交換。
1、冒泡排序
冒泡排序是一種簡單的排序方法,算法如下:
1.?首先將所有待排序的數字放入工作列表中。
2.?從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大于他的下一位,則將它與它的下一位交換。
3.?重復2號步驟(倒數的數字加1。例如:第一次到倒數第二個數字,第二次到倒數第三個數字,依此類推...),直至再也不能交換。
用C語言實現如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14intBubbleSort(int*a,intn)//a是待排序的整型數組,n是待排序數組的元素個數
{
inti,j,temp;
for(j=0;j
for(i=0;i
{
if(a[i]>a[i+1])//數組元素大小按升序排列
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
2、插入排序
插入排序也是一種簡單排序方法,算法如下:
1.?從第一個元素開始,認為該元素已經是排好序的。
2.?取下一個元素,在已經排好序的元素序列中從后向前掃描。
3.?如果已經排好序的序列中元素大于新元素,則將該元素往右移動一個位置。
4.?重復步驟3,直到已排好序的元素小于或等于新元素。
5.?在當前位置插入新元素。
6.?重復步驟2。
用C實現如下:
1
2
3
4
5
6
7
8
9
10
11
12intinsert(int*a,intn)
{
inti,?j,?temp;
for(i=1;?i
{
temp=a[i];
for(j=i;?j>0?&&?a[j-1]>temp;?j--)
a[j]=a[j-1];
a[j]=temp;
}
}
3、選擇排序
選擇排序的思想如下:
1.?設數組內存放了n個待排數字,數組下標從1開始,到n結束。
2.?i=1
3.?從數組的第i個元素開始到第n個元素,尋找最小的元素。(具體過程為:先設arr[i]為最小,逐一比較,若遇到比之小的則交換)
4.?將上一步找到的最小元素和第i位元素交換。
5.?如果i=n-1算法結束,否則回到第3步
用C語言實現如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18intsort(int*a,intn)
{
inti,?j,?min,?temp;
for(i=0;?i
{
min=i;
for(j=i+1;?j
if(a[min]>a[j])
min=j;
if(min?!=?i)
{
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
}
4、快速排序
(a)一趟排序的過程:
(b)排序的全過程
實踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分都小于后半部分,然后分別對前半部分和后半部分排序,這樣整個列表就有序了。
快速排序的基本算法是: