选择排序的思想是从未排序的数组中找到最小的元素,放在已排序的数组的最后
直接排序的思想是n个元素经过n-1趟直接排序得到有序结果
1.有序数组为空,无序数组为初始数组
2.第1趟排序
在无序数组中找到最小的元素,与无序数组中的第1个元素交换,使无序数组元素减少1,有序数组元素增加1
3.第i趟排序
第i趟排序开始时,有序数组元素个数为i-1,无序数组元素个数为n+1-i,在无序数组中找到最小元素,与无序数组中的第1个元素交换
这样,数组元素个数为n的数组可经过n-1次直接选择排序变为有序数组
C语言实现:
1:
//一次直接排序需交换n-i-1次
void SelectSort(int a[], int n) {
int i,j;
//经过n-1次排序
for(i=0; i<n-1; i++) {
//在无序数组中遍历
for(j=i+1; j<n; j++) {
//若无序数组中有元素小于a[i],则交换
if(a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
2:
//一次直接排序只交换1次
void SelectSort1(int a[], int n) {
int i,j,k;
for(i=0; i<n-1; i++) {
k = i;
//在无序数组中找出最小元素
for(j=i+1; j<n; j++) {
if(a[k] > a[j]) {
k = j;//目前无序数组最小元素所在位置
}
}
//若无序数组中的最小元素小于a[i],将找出的最小元素放在已排序数组的最后
if(k != i) {
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
直接排序的思想是n个元素经过n-1趟直接排序得到有序结果
1.有序数组为空,无序数组为初始数组
2.第1趟排序
在无序数组中找到最小的元素,与无序数组中的第1个元素交换,使无序数组元素减少1,有序数组元素增加1
3.第i趟排序
第i趟排序开始时,有序数组元素个数为i-1,无序数组元素个数为n+1-i,在无序数组中找到最小元素,与无序数组中的第1个元素交换
这样,数组元素个数为n的数组可经过n-1次直接选择排序变为有序数组
C语言实现:
1:
//一次直接排序需交换n-i-1次
void SelectSort(int a[], int n) {
int i,j;
//经过n-1次排序
for(i=0; i<n-1; i++) {
//在无序数组中遍历
for(j=i+1; j<n; j++) {
//若无序数组中有元素小于a[i],则交换
if(a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
2:
//一次直接排序只交换1次
void SelectSort1(int a[], int n) {
int i,j,k;
for(i=0; i<n-1; i++) {
k = i;
//在无序数组中找出最小元素
for(j=i+1; j<n; j++) {
if(a[k] > a[j]) {
k = j;//目前无序数组最小元素所在位置
}
}
//若无序数组中的最小元素小于a[i],将找出的最小元素放在已排序数组的最后
if(k != i) {
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}