冒泡法排序
冒泡法排序,见名思义,就是像吐泡泡一样,一个个泡泡按照应有的顺序吐到水面上,直至排序完成。
算法详解
对数组中的元素从前到后进行两两比较交换0和1,1和2,2和3,…n-1和n),每次完成这样的一种操作,根据具体的条件,最大值或最小值已被挪至最后元素,根据n-1次循环完成对数组排序。
算法代码
//冒泡法排序,本例按照升序进行排序
void bubbleSortint a[], int n)
{
printf"
冒泡法排序:
");
int temp = 0;
forint i = 1; i < n; i++) //需进行n-1次排序
{
forint j = 0; j < n - i; j++)//每次循环完毕最大值已挪至最后元素 n-i)
{
ifa[j] > a[j+1]) //两两比较,若前数比后面数大,则进行交换
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
算法详细排序演示
输入数组数据: 3 6 0 1 4 5 9 7 8 2
第1次: 3 0 1 4 5 6 7 8 2 '9' //第一次循环排序已将最大值排至最后位置
第2次: 0 1 3 4 5 6 7 2 '8' 9 //依此类推,直至排序完成
第3次: 0 1 3 4 5 6 2 '7' 8 9
第4次: 0 1 3 4 5 2 '6' 7 8 9
第5次: 0 1 3 4 2 '5' 6 7 8 9
第6次: 0 1 3 2 '4' 5 6 7 8 9
第7次: 0 1 2 '3' 4 5 6 7 8 9 //到此实际排序已完成
第8次: 0 1 '2' 3 4 5 6 7 8 9
第9次: 0 '1' 2 3 4 5 6 7 8 9 //程序执行完毕,排序完成
选择法排序
选择法排序,即选择性进行排序,根据特定情况对某个位置数据进行选择最值。
算法详解
选择法排序,即选择性进行排序,为每个位置选择最值进行交换插入,即数组第1个元素分别和第2、3、… 、n)进行比较,采用打擂台的方式,将最值替换至第1位,再次循环即第2个元素和3、4、…. 、n)比较,插入次值,也是通过n-1次循环完成排序。
算法代码
//选择法排序
void selectSortint a[], int n)
{
printf"
选择法排序:
");
int temp = 0;
forint i = 0; i < n - 1; i++) //需进行n-1次排序
{
forint j = i + 1; j < n; j++)//每次循环将最小值挪至i的位置下标
{
ifa[i] > a[j]) //进行两两比较,第i个下标位置的值为最小值
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
算法详细排序演示
输入数组数据: 3 6 0 1 4 5 9 7 8 2
第0次: '0' 6 3 1 4 5 9 7 8 2 //第一次循环排序已将最小值排至最前位置
第1次: 0 '1' 6 3 4 5 9 7 8 2 //依次类推,选择性的将最小值放置指定位置
第2次: 0 1 '2' 6 4 5 9 7 8 3
第3次: 0 1 2 '3' 6 5 9 7 8 4
第4次: 0 1 2 3 '4' 6 9 7 8 5
第5次: 0 1 2 3 4 '5' 9 7 8 6
第6次: 0 1 2 3 4 5 '6' 9 8 7
第7次: 0 1 2 3 4 5 6 '7' 9 8
第8次: 0 1 2 3 4 5 6 7 '8' 9 //排序完成
插入法排序
插入法排序,哈哈,这是我在数据结构中新学习的较为简单的排序方法,即向有序数组中进行插入,放置正确位置的一种排序方法。
算法详解
插入法排序,即向有序序列中找到合理位置进行插入数据,从而实现从第一个元素到最后元素全部插入完成排序的过程。第一次外层循环i为1即待插入数据的下标第二个数据),内层循环j从i的位置开始,使之与前边的数据一一比较,如果小于就交换插入,直至插入到合适的位置,通过n-1次循环将全部数据插入有序序列,完成排序。
算法代码
//插入法排序
void insertionSortint a[], int n)
{
printf"
插入法排序:
");
int temp = 0;
forint i = 1; i < n; i++) //通过n-1次循环将全部数据完成插入
{
forint j = i; j > 0; j--)//每次循环将下标为i的数据从后向前成功插入有序序列
{
ifa[j] < a[j-1]) //若后边数据比前边数据就进行交换插入
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}
算法详细排序演示
输入数组数据: 3 6 0 1 4 5 9 7 8 2
第1次: '3 6' 0 1 4 5 9 7 8 2 //将6插入有序序列3)中,此时完成插入
第2次: '0 3 6' 1 4 5 9 7 8 2 //将3插入有序序列中3,6)中,此时完成插入
第3次: '0 1 3 6' 4 5 9 7 8 2 //将1插入有序序列中0,3,6)中,此时完成插入
第4次: '0 1 3 4 6' 5 9 7 8 2 //将4插入有序序列中0,1,3,6)中,此时完成插入
第5次: '0 1 3 4 5 6' 9 7 8 2 //依次类推,直至排序完成
第6次: '0 1 3 4 5 6 9' 7 8 2
第7次: '0 1 3 4 5 6 7 9' 8 2
第8次: '0 1 3 4 5 6 7 8 9' 2
第9次: '0 1 2 3 4 5 6 7 8 9'
总结
哈哈,对数组的排序有好多方法,我在此介绍的是比较简单且常用的排序方法,当然啦,这些排序方法仍然可以改进修改,更加提高时间复杂度,增加排序效率。如果有小伙伴对此仍有疑虑或有改进的方法,欢迎评论留言,我看到会第一时间回复大家的,哈哈,加油冲冲冲!