09-排序1 排序 (25 分)

給定N個(長整型范圍內的)整數,要求輸出從小到大排序后的結果。

本題旨在測試各種不同的排序算法在各種數據情況下的表現。各組測試數據特點如下:

?

  • 數據1:只有1個元素;

    ?

    ?

  • 數據2:11個不相同的整數,測試基本正確性;

    ?

    ?

  • 數據3:103個隨機整數;

    ?

    ?

  • 數據4:104個隨機整數;

    ?

    ?

  • 數據5:105個隨機整數;

    ?

    ?

  • 數據6:105個順序整數;

    ?

    ?

  • 數據7:105個逆序整數;

    ?

    ?

  • 數據8:105個基本有序的整數;

    ?

    ?

  • 數據9:105個隨機正整數,每個數字不超過1000。

    ?

    輸入格式:

    輸入第一行給出正整數N(≤),隨后一行給出N個(長整型范圍內的)整數,其間以空格分隔。

    輸出格式:

    在一行中輸出從小到大排序后的結果,數字間以1個空格分隔,行末不得有多余空格。

    輸入樣例:

    11
    4 981 10 -17 0 -20 29 50 8 43 -5
    

    輸出樣例:

    -20 -17 -5 0 4 8 10 29 43 50 981
  • #include<cstdio>
    const int maxn = 100010;void Bubble_sort(long* a,int n);
    void Insertion_sort(long* a,int n);
    void Select_sort(long *a,int n);
    void Shell_sort(long* a,int n);
    void Shell_sedgewick(long* a,int n);
    //快排,歸并,堆排序 int main(){int n;scanf("%d",&n);long a[maxn];for(int i = 0; i < n; i++){scanf("%ld",&a[i]);}//Bubble_sort(a,n);//Insertion_sort(a,n);//Select_sort(a,n);//Shell_sort(a,n);
        Shell_sedgewick(a,n);for(int i = 0; i < n; i++){if(i == 0) printf("%ld",a[i]);else printf(" %ld",a[i]); }return 0;
    }//冒泡排序 
    void Bubble_sort(long *a,int n){bool flag;long temp;for(int i = n-1; i > 0; i--){flag = false;for(int j = 0; j < i; j++){if(a[j] > a[j+1]){temp = a[j];a[j] = a[j+1];a[j+1] = temp;flag = true;}}if(flag == false) break;}
    }//插入排序 
    void Insertion_sort(long* a,int n){int i,j;long temp;for(i = 1; i < n; i++){temp = a[i];for(j = i; j > 0 && a[j - 1] > temp; j--) a[j] = a[j - 1];a[j] = temp;}
    }//選擇排序 
    void Select_sort(long* a,int n){int i,j,k;long temp;for( i = 0; i < n; i++){temp = a[i];for(j = i + 1; j < n; j++){if(a[j] < temp){temp = a[j];k = j;}}a[k] = a[i];a[i] = temp;}
    }//希爾-自增排序 
    void Shell_sort(long*a ,int n){int i,j,d;long temp;for(d = n/2; d > 0; d /= 2){for(i = d; i < n; i++){temp = a[i];for(j = i; j >= d && a[j - d] > temp; j -= d)a[j] = a[j - d];a[j] = temp;}}
    }//希爾-數組排序 
    void Shell_sedgewick(long* a,int n){int i,j,d,si;int sedgewick[] = {929,505,209,109,41,19,5,1,0};long temp;for(si = 0; sedgewick[si] >= n; si++);for(; sedgewick[si] > 0; si++){d = sedgewick[si];for(i = d; i < n; i++){temp = a[i];for(j = i; j >= d && a[j - d] > temp; j -= d) a[j] = a[j - d];a[j] = temp;}}
    }

    ?

    void Heap_sort(long* a,int n){long temp;int i;for(i = (n-2)/2; i >= 0; i--){percdown(a,n,i);}for(i = n - 1; i > 0; i--){temp = a[0];a[0] = a[i];a[i] = temp;percdown(a,i,0);}
    }
    void percdown(long* a,int n,int i){long x = a[i];int child;for(; i * 2 + 1 <= n - 1; i = child){child = 2 * i + 1;if(child < n - 1 && a[child + 1] > a[child]) child++;if(a[child] <= x) break;else a[i] = a[child];}a[i] = x;
    }void Merge_sort(long*a ,int n){long* tmp = (long*)malloc(n*sizeof(long));msort(a,tmp,0,n-1);free(tmp);
    }
    void msort(long*a,long* tmp,int start,int end){int middle;if(start < end){middle = (start+end)/2;msort(a,tmp,start,middle);msort(a,tmp,middle+1,end);merge(a,tmp,start,end,middle);}
    }
    void merge(long* a,long* tmp,int start,int end,int middle){int l,s,r;l = start;s = start;r = middle + 1;while(l <= middle && r <= end){if(a[l] < a[r]) tmp[s++] = a[l++];else tmp[s++] = a[r++];}while(l <= middle) tmp[s++] = a[l++];while(r <= end) tmp[s++] = a[r++];for(;start <= end; start++)a[start] = tmp[start];
    }

    ?

轉載于:https://www.cnblogs.com/wanghao-boke/p/9997610.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385252.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385252.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡層

1. 簡單解釋一些ARP協議的工作過程

【Leetocde | 24 】152. 乘積最大子序列

這道題最直接的方法就是用DP來做&#xff0c;而且要用兩個dp數組&#xff0c;其中f[i]表示子數組[0, i]范圍內并且一定包含nums[i]數字的最大子數組乘積&#xff0c;g[i]表示子數組[0, i]范圍內并且一定包含nums[i]數字的最小子數組乘積&#xff0c;初始化時f[0]和g[0]都初始化…

【Leetcode | 1】3. 無重復字符的最長子串

這里我們可以建立一個HashMap&#xff0c;建立每個字符和其最后出現位置之間的映射&#xff0c;然后我們需要定義兩個變量res和left&#xff0c;其中res用來記錄最長無重復子串的長度&#xff0c;left指向該無重復子串左邊的起始位置的前一個&#xff0c;由于是前一個&#xff…

【Leetcode | 】93. 復原IP地址

class Solution { public:vector<string> strs;//用于存放臨時的四個段vector<string> result;//存放結果void dfs(string &s, int beginIndex, int step) {if (step 4 && beginIndex s.size()) //搜索成功{string temRec strs[0] "." …

海量數據(一)

1. 有1億個浮點數&#xff0c;如果找出期中最大的10000個&#xff1f; 最容易想到的方法是將數據全部排序&#xff0c;然后在排序后的集合中進行查找&#xff0c;最快的排序算法的時間復雜度一般為O&#xff08;nlogn&#xff09;&#xff0c;如快速排序。但是在32位的機器上&a…

1018 錘子剪刀布 (20 分)

大家應該都會玩“錘子剪刀布”的游戲&#xff1a;兩人同時給出手勢&#xff0c;勝負規則如圖所示&#xff1a; 現給出兩人的交鋒記錄&#xff0c;請統計雙方的勝、平、負次數&#xff0c;并且給出雙方分別出什么手勢的勝算最大。 輸入格式&#xff1a; 輸入第 1 行給出正整數 N…

1019 數字黑洞 (20 分)

給定任一個各位數字不完全相同的 4 位正整數&#xff0c;如果我們先把 4 個數字按非遞增排序&#xff0c;再按非遞減排序&#xff0c;然后用第 1 個數字減第 2 個數字&#xff0c;將得到一個新的數字。一直重復這樣做&#xff0c;我們很快會停在有“數字黑洞”之稱的 6174&…

61. 旋轉鏈表

給定一個鏈表&#xff0c;旋轉鏈表&#xff0c;將鏈表每個節點向右移動 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: 1->2->3->4->5->NULL, k 2 輸出: 4->5->1->2->3->NULL 解釋: 向右旋轉 1 步: 5->1->2->3->4->NULL…

1020 月餅 (25 分)

月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給出的情形是這樣的&#x…

2. 二叉樹的深度

題目描述 輸入一棵二叉樹&#xff0c;求該樹的深度。從根結點到葉結點依次經過的結點&#xff08;含根、葉結點&#xff09;形成樹的一條路徑&#xff0c;最長路徑的長度為樹的深度。 /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(in…

1021 個位數統計 (15 分

給定一個 k 位整數 1 (0, ,, d?k?1??>0)&#xff0c;請編寫程序統計每種不同的個位數字出現的次數。例如&#xff1a;給定 0&#xff0c;則有 2 個 0&#xff0c;3 個 1&#xff0c;和 1 個 3。 輸入格式&#xff1a; 每個輸入包含 1 個測試用例&#xff0c;即一個不超過…

【牛客網】X游戲

題目&#xff1a;X游戲 題目描述 我們稱一個數 X 為好數, 如果它的每位數字逐個地被旋轉 180 度后&#xff0c;我們仍可以得到一個有效的&#xff0c;且和 X 不同的數。要求每位數字都要被旋轉。 如果一個數的每位數字被旋轉以后仍然還是一個數字&#xff0c; 則這個數是有效…

1022 D進制的A+B (20 分)

輸入兩個非負 10 進制整數 A 和 B (≤)&#xff0c;輸出 AB 的 D (1)進制數。 輸入格式&#xff1a; 輸入在一行中依次給出 3 個整數 A、B 和 D。 輸出格式&#xff1a; 輸出 AB 的 D 進制數。 輸入樣例&#xff1a; 123 456 8輸出樣例&#xff1a; 1103 #include<cstdio>…

3. 二進制中1的個數

題目描述 輸入一個整數&#xff0c;輸出該數二進制表示中1的個數。其中負數用補碼表示。 class Solution { public:int NumberOf1(int n) {int count 0; for(int i 0; i < 32; i){if(n & (1 << i))count;}return count;} };

1023 組個最小數 (20 分)

給定數字 0-9 各若干個。你可以以任意順序排列這些數字&#xff0c;但必須全部使用。目標是使得最后得到的數盡可能小&#xff08;注意 0 不能做首位&#xff09;。例如&#xff1a;給定兩個 0&#xff0c;兩個 1&#xff0c;三個 5&#xff0c;一個 8&#xff0c;我們得到的最…

C++中重載、重寫(覆蓋)和隱藏的區別實例分析

1.重載&#xff1a;重載從overload翻譯過來&#xff0c;是指同一可訪問區內被聲明的幾個具有不同參數列&#xff08;參數的類型&#xff0c;個數&#xff0c;順序不同&#xff09;的同名函數&#xff0c;根據參數列表確定調用哪個函數&#xff0c;重載不關心函數返回類型。 示…

1024 科學計數法 (20 分

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法&#xff0c;其滿足正則表達式 [-][1-9].[0-9]E[-][0-9]&#xff0c;即數字的整數部分只有 1 位&#xff0c;小數部分至少有 1 位&#xff0c;該數字及其指數部分的正負號即使對正數也必定明確給出。 現以科學計數法…

static、const用法

一、static用法 C的static有兩種用法&#xff1a;面向過程程序設計中的static和面向對象程序設計中的static。前者應用于普通變量和函數&#xff0c;不涉及類&#xff1b;后者主要說明static在類中的作用。 一、面向過程設計中的static 1、靜態全局變量&#xff1a;在全局變量前…

1025 反轉鏈表 (25 分

給定一個常數 K 以及一個單鏈表 L&#xff0c;請編寫程序將 L 中每 K 個結點反轉。例如&#xff1a;給定 L 為 1→2→3→4→5→6&#xff0c;K 為 3&#xff0c;則輸出應該為 3→2→1→6→5→4&#xff1b;如果 K 為 4&#xff0c;則輸出應該為 4→3→2→1→5→6&#xff0c;即…

1026 程序運行時間 (15 分

要獲得一個 C 語言程序的運行時間&#xff0c;常用的方法是調用頭文件 time.h&#xff0c;其中提供了 clock() 函數&#xff0c;可以捕捉從程序開始運行到 clock() 被調用時所耗費的時間。這個時間單位是 clock tick&#xff0c;即“時鐘打點”。同時還有一個常數 CLK_TCK&…