資料結構 內部排序法

2021-09-23 05:54:05 字數 1783 閱讀 3983

總結一些演算法的實現:

交換排序*****

1.冒泡演算法

typedef struct arr1

arr1;

void  bubblesort(arr1 goal, int n)

} if (!flag) // m沒有交換時證明排玩了,跳出迴圈結束排序。

return;

}}

2.快速排序

//時間複雜度為o(nlog2n),空間複雜度為o(log2n);

void quicksort(arr1 goal, int s, int t)

goal[i] = goal[j];

while (i < j && goal[i].key < tmp.key) //把大於中心標誌的數拋到右邊

goal[j] = goal[i];

} goal[i] = tmp; // 當i = j時跳出迴圈,這時i和前面的某個值是一樣的,

//把他換為tmp的中心標誌,這樣一輪的替換完成,左邊小於tmp,右邊大於tmp

quicksort(goal, s, i - 1); //對左區間遞迴

quicksort(goal, i + 1, t); //對右區間遞迴

}}

插入排序*****

3.直接插入

//該演算法的時間複雜度最壞的情況是倒序時的o(n2),最好是正序時的o(n);其平均複雜度是o(n2)

void insertsort1(arr1 goal, int n)

goal[j + 1] = tmp; //向有序區插入

}}

4.希爾排序

//直接排序法的一種,時間複雜度一般認為是o(n1.3),一般是最後一趟出有序區,他是不穩定的排序(還沒有想向出他的插入圖)

void insertsort3(arr1 goal, int n)

goal[j + gap] = tmp; //向有序區插入

} gap = gap / 2; //減小增量

}}

選擇排序*****

5.直接選擇

//和冒泡差不多,就是把排序放到外迴圈,使得可以定乙個需要的有序區。

void selectsort(arr1 goal, int n)

} if (k != i) //排序

}}

6.歸併排序

//2路歸併排序

void merge(arr1 goal, int low, int mid, int hight)

else //將第二段複製到r1

}while (i <= mid) //將第一段餘下部分複製到r1

while (j <= hight) //將第二段餘下部分複製到r1

for (k = 0, i = low; i <= hight; k++, i++) //將r1複製會goal中

delete r1;

}void mergepass(arr1 goal, int lenght, int n) //對整個表進行歸併

if (i + lenght - 1 < n) //餘下這2個表的長度,後者小於lenght,歸併這2個表 }

//二路歸併排序

void mergesort(arr1 goal, int n)

}

資料結構 內部排序

內部排序演算法 時間複雜度 o n 2 o n 2 o n 2 空間複雜度 o 1 o 1 o 1 演算法名稱 插入 選擇 冒泡 演算法名稱 希爾 堆 快速 歸併 基數 空間複雜度 o 1 o 1 o logn o n o 2rd 時間複雜度 o nlogn o nlogn o nlogn o nl...

資料結構6 2內部排序

假設含n個記錄的序列為 其對應的關鍵字序列為 這些關鍵字的排列方式有多種,其中至少有一種排列方式能使得關鍵字之間存在著這樣乙個關係 kp1 kp2 kpn 按此關係將記錄序列重新排列為 即為有序記錄,將這一過程稱為排序。若在乙個記錄序列中ki kj,且在排序前的序列中ri領先於rj。若在排序後的序列...

資料結構 內部排序之氣泡排序

1.基本思想 每次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來 2.具體做法 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越...