排序算法和查找算法

1.排序的方法:
(1)冒泡排序(经典的自定义排序):

    算法:
            1).      若有n个数排序,必须两两比较(相邻的两个数)n-1轮----控制外围的for循环
     2).每一轮比较的次数 = n-当前的轮数-----控制里面的for循环
     3).每一轮比较完成后,都会获得当前轮中的最小数,
    也就是说,比如:
    第一轮比较后,会获得所有数中的最小(大)数
    第二轮比较后,会获得所有数中的第二小(大)的数
    ......(依次类推)
    程序:
    for(int i = 0;i < arr.length - 1;i++){   //外层:控制轮数
            for(int j = 0;j < arr.length - 1 - i;j++){
                if(isAsc ? arr[j+1] < arr[j] : arr[j+1] > arr[j]){
                   temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;
                }
            }
        }

(2)系统自定义的排序—java.util.Arrays
Arrays.sort(arr, new Comparator(){ //T的类型要和前面arr数组的类型相同(不能是值类型,要用包装类型,如:Integer)
//重写compara方法
/**
排序的技巧,可以这么记:
1.若要排升序,就用o1 - o2
2.若要排降序,就用o2 - o1
*/
});
(3)选择排序
算法:
第一轮:默认第一个是最小的,然后开始比较,碰到比第一个小的就把当前的位置标记为最小,直
至到最后一个元素,则找到了最小的元素,然后把第一个元素和当前最小的的元素互换位置。
第二轮:默认第二个元素是最小的,然后………
程序:
for(int i = 0;i < arr.length - 1;i++){ //做第i趟排序
int k = i;
for(int j = k + 1;j < arr.length;j++){ //选最小的记录
if(arr[j] < arr[k]){
k = j; //记录目前找到的最小值所在的位置
}
}
if(i != k){ //交换arr[i]和arr[k]
int temp = arr[i];arr[i] = arr[k];arr[k] = temp;
}
}
(4)插入排序
算法:
从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是
将a[i]插入到已经排序好的
程序:
for (int i = 1; i < a.length - 1 ; i++) {
for (int j = i; j > 0; j–) {
if (a[j] < a[j - 1]) {
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
} else {
break;
}
}
}
2.数组中元素的查找
(1)顺序查找(”穷举法”)
遍历数组,从数组中第一个元素开始查找。最简单,平均效率低。
如:查找一个数组中,所有等于num这个数的下标
int[] founded = new int[arr.length]; //存储num在原数组arr中出现的下标,最多arr.length个
for(int i = 0;i < founded.length;i++){
founded[i] = -1; //默认的是将founded数组的所有元素都置-1;
}
int count = arr.length; //定义一个变量,记录founded中值为-1的总个数
for(int i = 0;i < arr.length;i++){ //穷举查找
if(arr[i] == num){
founded[i] = i;
count–;
}
}
return count

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值