1)冒泡排序(属于交换排序因为在表示的过程中,数字之间进行了交换):
#include <stdio.h>
int main()
{
int m=0,n=0;
int i,j,k;
int a[123];
int num;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
{
if(a[j]<a[i])
{
num=a[j];
a[j]=a[i];
a[i]=num;
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
解释:
10个数字进行排序 ,外循环9次,每一次排序都是找到一个最小的放在未排序列中第一个位置 ,直到倒数第二个。
内循环(默认未排序列的第一个是最小的),后期通过两两比较将最小数放在第一个位置上。
当i=0时,内循环将0到9的所有数比较,最后将0置为最小。然后i++,i=1.
当i=1时,内循环将1到9的所有数字进行比较,最后将a【1】处置为最小的数。(默认a【1】是最小的数,后面的数与a【1】进行比较如果有比a【1】小的 数就用这个数取代a【1】)。
2)快速排序(属于交换排序因为在表示的过程中,数字之间进行了交换):
通常,快速排序使用了递归的方式,我会在调用递归处用红色标出,在递归结束返回上一层的时候用绿色线标出
#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
int i, j, t, temp;
if(left > right)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while(i != j) { //顺序很重要,要先从右边开始找
while(a[j] >= temp && i < j)
j--;
while(a[i] <= temp && i < j)//再找右边的
i++;
if(i < j)//交换两个数在数组中的位置
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基准数归位
a[left] = a[i];
a[i] = temp;
quicksort(left, i-1);//继续处理左边的,这里是一个递归的过程
quicksort(i+1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {
int i;
//读入数据
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
quicksort(1, n); //快速排序调用
//输出排序后的结果
for(i = 1; i < n; i++)
printf("%d ", a[i]);
printf("%d\n", a[n]);
return 0;
}
该方法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。