黑马程序员技术交流社区
标题: 关于冒泡排序和选择排序的问题 [打印本页]
作者: lixiaob626 时间: 2015-9-3 08:20
标题: 关于冒泡排序和选择排序的问题
关于冒泡和选择排序的区别在于内层循环,冒泡是大数下沉,小数上浮,一列之间的比较交换;
选择排序是大小之间的比较,一行之间的交换。个人理解,不知道是不时这样,请高人指点...
//冒泡排序
void test1(int arr[],int len){
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1;j++){
if(arr[j]>arr[j+1]){
int temp =arr[j];
arr[j] =arr[j+1];
arr[j+1] =temp;
}
}
}
}
//选择排序
void test2(int arr[],int len){
for(int i=0;i<len-1;i++){
for(int j=1+i;j<len;j++){
if(arr>arr[j]){
int temp =arr;
arr = arr[j];
arr[j] = temp;
}
}
}
}
作者: yibyli 时间: 2015-9-3 09:10
你那个好像不是选择排序吧..............选择法的好处是先找出每趟的最大或者最小下标,经过判断后再互换位置,尽可能少的互换位置,提高了性能,而冒泡排序交换位置要远远多于选择法。
其实也没什么卵用,只排序几个数的话,性能不是问题,方便才是唯一。
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
@autoreleasepool
{
int a[10];
int n = 10;
for (int i = 0; i < n; i++) {
a = arc4random_uniform(10);//在0~9中选择随机数
}
for (int i = 0; i < n; i++) {
printf("%4d",a);
}
printf("\n");
for (int i = 0; i < n - 1; i++)
{
int k = i;
for (int j = i + 1; j < n; j++)
{
if (a[k]>a[j])//把最小的数的下标给k
{
k = j;
}
}
if (k != i) {//确保每趟的i下标代表元素值是其后面数中最小的
int temp = a;
a = a[k];
a[k] = temp;
}
}
for (int i = 0; i < n; i++) {
printf("%4d",a);
}
}
return 0;
}
9 5 0 0 8 5 6 6 7 6
0 0 5 5 6 6 6 7 8 9
作者: Joker_999 时间: 2015-9-3 09:43
都是大牛,又学到了知识
作者: 颖峰 时间: 2015-9-3 10:22
主要是思路
选择排序:从第一个数开始固定 向后依次比较
冒泡排序:两两比较,大数下沉
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |