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
新闻热点
疑难解答