哈嘍,,大家,學(xué)習(xí)過程中個人覺得排序算法挺重要的,雖然目前沒發(fā)現(xiàn)在哪里用到過,但是記著總是有好處的。。今天給大家說一下學(xué)習(xí)中寫的幾種排序查找算法,希望對大家有用
1、簡單排序算法
初始序列:{49 27 65 97 76 12 38}
第1趟:12與49交換:12{27 65 97 76 49 38}
第2趟:27不動?。?2 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) /*對記錄數(shù)組r做簡單選擇排序,length為待排序記錄的個數(shù)*/
{
int temp;
for ( i=0 ; i< length-1 ; i++) //n-1趟排序
{
int index=i; //假設(shè)index處對應(yīng)的數(shù)組元素是最小的
for ( j=i+1 ; j < length ; j++) //查找最小記錄的位置
if (r[j].key < r[index].key )
index=j;
if ( index!=i) //若無序區(qū)第一個元素不是無序區(qū)中最小元素,則進行交換
{ 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;
? ? ? ?}
? ? ?}
? ?}
折半查找必須是有序數(shù)據(jù):
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);
插入排序總是用后一個和第一個來比較,所以第一個元素不用變。。
大概就這幾種,希望能對你們有用。。晚上要早點休息啊大家,別熬夜。。