1. 程式人生 > >iOS 演算法面試題(氣泡排序、選擇排序、連結串列逆序)~demo

iOS 演算法面試題(氣泡排序、選擇排序、連結串列逆序)~demo

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄

一、氣泡排序

//1、對以下一組資料進行降序排序(氣泡排序)。“241785139547645563”

int main(int argc,char *argv[]) {

int array[10] = {24,17, 85,13, 9,54, 76,45, 5,63};

int num =sizeof(array)/sizeof(int);

for(int i =0; i < num-1; i++) {

for(int j =0; j < num - 1 - i; j++) {

if

(array[j] < array[j+1]) {

int tmp = array[j];

                array[j] = array[j+1];

                array[j+1] = tmp;

            }}}

for(int i =0; i < num; i++) {

printf("%d", array[i]);

if(i == num-1) {

printf("\n");

        }else {

printf(" ");

        }

    }

}

二、選擇排序


//2、對以下一組資料進行升序排序(選擇排序)。“86, 37, 56, 29, 92, 73, 15, 63, 30, 8”

void sort(int a[],int n){
    
int i, j, index;
for(i =0; i < n - 1; i++) {
        
        index = i;
        
for(j = i +1; j < n; j++) {
            
if(a[index] > a[j]) {
                
                index = j;
                
            }}
        
if
(index != i) {
            
int temp = a[i];
            
            a[i] = a[index];
            
            a[index] = temp;
            
        }}}

int main(int argc,constchar * argv[]) {
    
int numArr[10] = {86,37, 56,29, 92,73, 15,63, 30,8};
    
sort(numArr,10);
    
for (int i =0; i < 10; i++) {
        
printf("%d, ", numArr[i]);
        
    }
    
printf("\n");
    
return0;

}

三、連結串列逆序

//3、如何實現連結串列翻轉(連結串列逆序)?

思路:每次把第二個元素提到最前面來。


#include <stdio.h>

#include <stdlib.h>

typedefstruct NODE {

structNODE *next;

int num;

}node;

node *createLinkList(int length) {

if (length <=0) {

returnNULL;

    }

node *head,*p,*q;

int number =1;

    head = (node *)malloc(sizeof(node));

    head->num =1;

    head->next = head;

    p = q = head;

while (++number <= length) {

        p = (node *)malloc(sizeof(node));

        p->num = number;

        p->next =NULL;

        q->next = p;

        q = p;

    }

return head;

}

void printLinkList(node *head) {

if (head ==NULL) {

return;

    }

node *p = head;

while (p) {

printf("%d ", p->num);

        p = p -> next;

    }

printf("\n");

}

node *reverseFunc1(node *head) {

if (head ==NULL) {

return head;

    }

node *p,*q;

    p = head;

    q = NULL;

while (p) {

node *pNext = p ->next;

        p -> next = q;

        q = p;

        p = pNext;

    }

return q;

}

int main(int argc,constchar * argv[]) {

node *head =createLinkList(7);

if (head) {

printLinkList(head);

node *reHead =reverseFunc1(head);

printLinkList(reHead);

free(reHead);

    }

free(head);

return0;

}


謝謝!!!






相關推薦

iOS 演算法試題(氣泡排序選擇排序連結串列)~demo

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、氣泡排序 //1、對以下一組資料進行降序排序(氣泡排序)。“24,17,85,13,9,54,76,45,5,63” i

iOS 演算法試題(字串輸出二叉樹歸併排序)~demo

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、字串逆序輸出 1、實現一個字串“how are you”的逆序輸出(程式語言不限)。如給定字串為“hello wo

演算法試題之對n個數排序

這個題用上一篇部落格中演算法面試題之統計詞頻前k大中的基於檔案的歸併排序演算法顯然是可以秒殺的,但是不是很好寫,這道題目強調了每個數字都小於10^7,而且不會出現重複的數字,又給了1M的記憶體,因此必然是想讓我們用一個其他的演算法去搞定他,怎麼搞定呢?我們來看題目裡面出現的不和諧的描述!不會出現重複的數字,

【劍指Offer學習】【試題5 : 從尾到頭列印連結串列】【思路】

方案一:(後進先出)遍歷連結串列,再從棧頂開始出個輸出結點的值,此時輸出的結點的順序已經反轉過來了。 先推進棧 再依次取出棧頂元素 方案二:遞迴。 判斷連結串列頭結點是否為空 將 next 結點作為下一次的實參 輸出當前棧頂元素。 缺點:當連結串

試題6:從尾到頭列印連結串列

題目: 輸入一個連結串列的頭結點,從尾到頭反過來列印每個節點的值。 struct LIstNode { int m_nKey; ListNode* m_pNext; } 分析:第一反應,從頭到尾輸出比較簡單于是可以將連結串列連線節點的指標反轉過來,改變連結串列的

【劍指Offer學習】【試題5 : 從尾到頭列印連結串列

題目:輸入個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。 public class Test05 { /** * 結點物件 */ public s

劍指offer試題6:從尾到頭列印連結串列(Java實現)

題目:輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。 思路:因為要實現從頭到尾遍歷,然後從尾到頭列印,也就是說第一個遍歷到的最後一個列印,最後遍歷到的第一個列印,這很明顯符合棧 “先進後出” 的特點,所以我們可以利用棧來實現這種順序。 測試用例: 功能測試:

劍指Offer試題:4.從尾到頭列印連結串列

一、題目:從尾到頭列印連結串列 題目:輸入一個連結串列的頭結點,從尾到頭反過來打印出每個結點的值。   到解決這個問題肯定要遍歷連結串列。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第一個遍歷到的結點最後一個輸出,而最後一個遍歷到的結點第一個輸出。這就是典型的“後進先出”,我

C++使用迭代和遞迴兩種方式實現連結串列演算法

1.連結串列逆序的兩種演算法       C++實現一個連結串列逆序演算法 2.連結串列逆序演算法實現原理 如A->B->C->D->E,一般會有以下兩種思路,如下 思路1: 先取出連結串列的最後一個E,然後將E作為新連結串列的頭, 現在狀

排序演算法(直接插入氣泡排序選擇排序快速排序希爾排序排序歸併排序

main函式 int main() { int data[] = {1,2,6,3,4,7,7,9,8,5}; //bubble_sort(data,10); //select_sort(data,10); Insert_Sort(data,10); fo

《資料結構與演算法》之排序演算法氣泡排序選擇排序

排序(Sorting) 是計算機程式設計中的一種重要操作,它的功能是將一個數據元素(或記錄)的任意序列,重新排列成一個關鍵字有序的序列。 排序演算法分類: 一、非線性時間比較類排序 1、交換排序(氣泡排序、快速排序) 2、插入排序(簡單插入排序、布林排序) 3、選擇排序(簡單選擇

排序演算法上——氣泡排序插入排序選擇排序

1. 排序演算法? 排序演算法應該算是我們最熟悉的演算法了,我們學的第一個演算法,可能就是排序演算法,而在實際應用中,排序演算法也經常會被用到,其重要作用不言而喻。 經典的排序演算法有:氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序。按

氣泡排序選擇排序插入排序快速排序演算法耗時測試

import java.util.*; public class Test1 { public static void main(String[] args) throws Exception{ int[] arr1=new int[20000]; for(int i=0;i&l

Python三種排序演算法的執行速度對比(快速排序氣泡排序選擇排序)

最近看了一下快速排序演算法,據說速度比其他的排序演算法快,於是寫了三個排序演算法對比一下,分別是氣泡排序,快速排序,選擇排序,以下是三個排序演算法的程式碼: 氣泡排序   BubbleSort.py # -*- coding:utf8 -*- def Sort(list

三個簡單基本的排序演算法---氣泡排序 選擇排序插入排序

1.氣泡排序 public class BubbleSort { public static void sort(long[] arr){ long temp; for(int i=0;i<arr.length-1;i++){ for(int j=ar

3. 排序通常有多種演算法,如氣泡排序插入排序選擇排序希爾排序歸併排序快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)

3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現  [分值:20] 您的回答:(空)  (簡答題需要人工評分) package com.interview; /** * 各種排序演算法 */

Java常用的八種排序演算法與程式碼實現(一):氣泡排序插入排序選擇排序

這三種排序演算法適合小規模資料排序 ---   共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法)   不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 ---   穩定排序演算法:可以保持數值相等的兩個物件,在排序之

C語言中常用排序演算法氣泡排序選擇排序插入排序希爾排序快速排序排序)實現比較

以下程式在win10 X64位作業系統,使用VS2017執行驗證可行 排序是非常重要且很常用的一種操作,有氣泡排序、選擇排序、插入排序、希爾排序、快速排序、堆排序等多種方法。 例項1 冒泡法排序 1.前言: 陣列中有N個整數,用冒泡法將它們從小到大(或從大到小)排序。冒泡法

排序演算法】—— 氣泡排序選擇排序

1、氣泡排序 這個氣泡排序的原理就像水裡的魚吐泡泡一樣,起初是小一點的泡泡,然後越來越大,最後的最大。 演算法描述: 1)設待排序序列中的記錄的數為n 2)一般的,第i趟起泡排序從1到n-i+1 3)依次比較相鄰兩個記錄的數字,如果發生逆序,則交換 4)其結果是這n-i+1個記錄中,

演算法與資料結構(十三) 氣泡排序插入排序希爾排序選擇排序(Swift3.0版)

本篇部落格中的程式碼實現依然採用Swift3.0來實現。在前幾篇部落格連續的介紹了關於查詢的相關內容, 大約包括線性資料結構的順序查詢、折半查詢、插值查詢、Fibonacci查詢,還包括數結構的二叉排序樹以及平衡二叉樹的構建與查詢,然後還聊了雜湊表的構建與查詢。接下來的幾篇部落格中我們就集中的聊一下常見的集中