交换排序和选择排序的不同主要体现在选择和交换上。
就拿第一个元素来讲(比如此时做的是降序,即从大到小)
对于交换排序:在排序过程中会拿第一个元素和后面的元素挨个比较,只要是比第一个元素大的,都和第一个元素交换。(用交换元素来找到相应元素)
对于选择排序:会用一个额外的变量,记下数组下标。在排序过程中会拿第一个元素和后面的元素挨个比较,找到最大元素的下标。(用数组下标来找到相应元素)
综上所述,交换排序就是只要遇到更大的就交换,每次交换的后面可能会遇到更大的,因此可能不是最终结果。而选择排序每次交换都会确定一个元素,交换后后面没有比它更大的。
数组排序:
交换排序:
#include<stdio.h>
int main(){
int a[] = {13,2,67,4,90};
int length = sizeof(a)/sizeof(a[0]);
for(int i=0;i<(length-1);i++)
{
for(int j=i+1;j<length;j++)
{
if(a[i]<a[j])//找到更大的元素交换
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
} } }}
选择排序:
#include<stdio.h>
int main(){
int a[] = {13,2,67,4,90};
int temp;
int length = sizeof(a)/sizeof(a[0]);
for(int i=0;i<(length-1);i++) {
int k=i;
for(int j=i+1;j<length;j++) {
if(a[k]<a[j]) {
k=j;//找到最大的元素下标
} }
temp = a[i];
a[i] = a[k];
a[k] = temp;
}}