歸併和sort排序簡單運用

2021-09-25 07:41:33 字數 3211 閱讀 9286

今天學習了歸併排序和sort函式的簡單運用,感覺sort函式真的是無比的神奇,能加各種神奇的東西,然後進行一些排序練習

歸併排序基本**

#include

using namespace std;

void

merge

(int *data, int start, int end, int *result)

while

(i <= mid)

while

(j <= end)

for(int i =

0; i < k; i++

) data[start + i]

= result[i];}

}int main()

; int result[10]

;merge

(data,0,

4, result)

;for

(int i =

0; i <

5; i++

) cout << result[i]

<<

" ";

system

("pause");

return0;

}

這道題用了sort函式和歸併兩種方法,歸併函式比較難理解,寫下**,以後忘了方便找。歸併重要還是要理解遞迴的呼叫。

**如下:

#include

#include

using namespace std;

/*void merge(int *data, int start, int end, int *result)//歸併

while (i <= mid)

while (j <= end)

for (int i = 0; i < k; i++)

data[start + i] = result[i]; }}

int result[110];*/

int a[

110]

;int main()

}}/*for (int i = 0; i < n; i += 2)//歸併

這道題就是排序和檢索

**如下:

#include

#include

using namespace std;

int a[

10010];

int main()

}if(find)

cout << b <<

" found at "

<< index << endl;

else

cout << b <<

" not found"

<< endl;

} x++;}

system

("pause");

return0;

}

這道題就是sort函式的運用,但是可能會超時,所以運用printf輸出,printf比cout速度更快。還有cin的優化 std:ios::sync_with_stdio(false);

加入這行**速度會和scanf差不多。

**如下:

#include

#include

#include

using namespace std;

int a[

1000000];

int main()

}system

("pause");

return0;

}

這道題是判斷所給資料的排序是否對,以及是否穩定。所以必須找到一種穩定的排序方式。剛開始想到氣泡排序,但是卻會超時。最後用了sort函式的排序sort(s,s+n,cmp);

**如下:

#include

#include

#include

using namespace std;

struct s

s1[310

],s2[

310]

;int cmp

(s a,

s b)

int main()

for(int i =

0; i <

n; i++

)sort

(s1, s1 +

n, cmp)

; bool stable =

false

, answer =

false

;for

(int i =

0; i <

n; i++)}

if(!answer)}}

if(answer)

else

else

cout <<

"right"

<< endl;}}

system

("pause");

return0;

}

這道題分為幾種方式的排序,實際就是sort函式排序的運用。

**如下:中間還有氣泡排序的寫法

#include

#include

#include

using namespace std;

struct s

s[100000];

bool cmp1

(s x,

s y)

bool cmp2

(s x,

s y)

bool c***

(s x,

s y)

/*void first(s *s,int *a,int n)

} }}*//*void second(s *s, int *a, int n)

if (s[j].s2 == s[j + 1].s2)

}} }

}*//*void third(s *s, int *a, int n)

if (s[j].s2 == s[j + 1].s2)

}} }

}*///int a[100000];

int main()

return0;

}

今天做了這幾道題目感覺學到了不少,了解了遞迴和sort函式的運用,算是排序勉強入門吧,還需繼續努力。排序重要還是要理解原理,還要回靈活運用。

演算法整理 排序(歸併和快排)

趁找工作之際,著手對演算法進行相關學習和整理,便於自己複習鞏固,也以此來督促自己進行演算法的研究學習。通過對演算法的整理,一方面希望對於自己有所提高,另一方面,也希望提高自己的書面表達能力,文中有所不正確的地方,望批評指出,多謝。對於演算法學習,從簡單到複雜。今天主要整理一下排序相關的演算法。對於排...

歸併和快速排序思想的延伸

前面學習了歸併和快速排序演算法,現在來了解歸併和快速排序演算法背後的演算法思想 分治思想,並對歸併和快速排序進行擴充套件,解決經典演算法問題 逆序對和第k大的演算法問題 顧名思義,分而治之,就是將原問題,分割成同等結構的子問題,之後將子問題逐一解決後,原問題也就得到了解決。對於乙個長度為n的整數序列...

快速 歸併和基數排序

快速排序 public class quicksort while arr r pivot if l r temp arr l arr l arr r arr r temp if arr l pivot if arr r pivot if l r if leftif right l public c...