为了更好的理解两种方法的区别,我们分别用图解法和代码实现来区分一下~
例如有一组数据arr[5]={9,5,7,3,0},分别用两种方法对其进行排序
选择排序法图解说明
如图,数组arr有5个数,需要比较4次,如果按照从小到大排序的话;第一次比较:将数组中arr[0]与后面的每个元素进行比较,找到最小的元素与arr[0]交换,再进行第二次比较;第二次比较,将数组中arr[1]与后面的每个元素进行比较,找到第二小的元素与arr[1]交换……依次循环
冒泡排序法图解
如图,冒泡排序法的思路:每次将相邻两个数进行比较,将小的调到前头,依次冒泡从而实现排序
接下来用代码分别简单实现一下~
选择排序法的数组实现代码
#include<stdio.h>
void sort(int arr[], int n)
{
int i, j, k, t;
for (i = 0; i < n - 1; i++)//排序需要排n-1次
{
k = i;//排到arr[i]位置上
for (j = i + 1; j < n; j++)//查找第i小的元素
{
if (arr[j] < arr[k])
{
k = j;//将最小值下标j附给k
}
}
t = arr[k];
arr[k] = arr[i];
arr[i] = t; //进行交换
}
}
int main()
{
int i = 0;
int arr[] = { 9, 5, 7, 3, 0 };
sort(arr, 5);
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
选择排序法的指针实现代码
void sort(int *arr, int sz)
{
int i, j, k;
for (i = 0; i < sz - 1; i++)//排序需要排n-1次
{
k = i;//排到arr[i]位置上
for (j = i+1; j < sz; j++)//查找第i小的元素
{
if (*(arr + j) < *(arr + k))
{
k = j;//将最小值下标j附给k
}
}
int *tmp = *(arr + k);
*(arr + k) = *(arr + i);
*(arr + i) = tmp;
}
}
print(int *arr, int sz)
{
int i;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
printf("\n");
}
int main()
{
int i = 0;
int arr[] = {9,5,7,3,0};
int sz = sizeof(arr) / sizeof(arr[0]);
sort(arr, sz);
print(arr,sz);
system("pause");
return 0;
}
冒泡排序法的数组实现代码
#include<stdio.h>
int main()
{
int a[5] = {9,5,7,3,0};
int i = 0;
int j = 0;
int tmp = 0;
for (i = 0; i < 4; i++)//比较4趟
{
for (j = 0; j < 4 - i; j++)//每趟两两比较4-i次
{
if (a[j]>a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}
冒泡排序法的指针实现代码
void bubble_sort(int *arr,int sz)
{
int i = 0;
int j = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (*(arr + j)>*(arr + j + 1))
{
int *tmp = *(arr + j);
*(arr + j )= *(arr + j + 1);
*(arr + j + 1) = tmp;
}
}
}
}
print_sort(int *arr, int sz)
{
int i;
for (i = 0; i < sz; i++)
{
printf("%d ", *(arr + i));
}
printf("\n");
}
int main()
{
int i = 0;
int arr[] = { 9, 5, 7, 3, 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
print_sort(arr, sz);
system("pause");
return 0;
}