哈喽,,大家,学习过程中个人觉得排序算法挺重要的,虽然目前没发现在哪里用到过,但是记着总是有好处的。。今天给大家说一下学习中写的几种排序查找算法,希望对大家有用
1、简单排序算法
初始序列:{49 27 65 97 76 12 38}
第1趟:12与49交换:12{27 65 97 76 49 38}
第2趟:27不动 :12 27{65 97 76 49 38}
第3趟:65与38交换:12 27 38{97 76 49 65}
第4趟:97与49交换:12 27 38 49{76 97 65}
第5趟:76与65交换:12 27 38 49 65{97 76}
第6趟:97与76交换:12 27 38 49 65 76 97 完成
算法具体描述如下:
void SelectSort(RecordType r[], int length) /*对记录数组r做简单选择排序,length为待排序记录的个数*/
{
int temp;
for ( i=0 ; i< length-1 ; i++) //n-1趟排序
{
int index=i; //假设index处对应的数组元素是最小的
for ( j=i+1 ; j < length ; j++) //查找最小记录的位置
if (r[j].key < r[index].key )
index=j;
if ( index!=i) //若无序区第一个元素不是无序区中最小元素,则进行交换
{ temp= r[i]; r[i]= r[index]; r[index]=temp; } //利用temp作为临时空间,两个值交换的桥梁
}
}
冒泡算法:
var flag = 0;
for (var i = 0; i < arr.length – 1; i++) {
flag = 1;
for (var j = 0; j < arr.length – 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 0;
}
}
}
折半查找必须是有序数据:
var target = 7;
var start = 0;
var end = arr.length – 1;
var mid = 0;
while (start <= end) {
mid = Math.round((start + end) / 2);
if (a[mid] < target) {
start = mid + 1;
}else if(a[mid] > target){
end = mid – 1;
}else {
break;
}
}
if (start > end) {
console.log(“没找到”);
}else {
console.log(“arr[” +mid+ “] = ” + arr[mid]);
}
选择查找:
var arr = [4, 6, 8, 1, 9, 3, 5, 2, 7];
for (var i = 0; i < arr.length – 1; i++) {
var minIndex = i;
for (var j = minIndex + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
var temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
console.log(arr);
插入排序
var arr1 = [1, 3, 4, 7, 8, 2];
for (var i = 1; i < arr1.length; i++) {
var j = i;
var temp = arr1[j];
while (j > 0 && temp < arr1[j – 1]) {
arr1[j] = arr1[j – 1];
j–;
}
arr1[j] = temp;
}
console.log(arr1);
插入排序总是用后一个和第一个来比较,所以第一个元素不用变。。
大概就这几种,希望能对你们有用。。晚上要早点休息啊大家,别熬夜。。