摘要: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)排序的全过程
实践证明,快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。
快速排序的基本算法是: